GGGCCCDDD 문제..

  • jereneal20
    jereneal20

    분명 문제를 보기엔 복잡도 n이나 n^2정도일텐데..
    여러 숫자 GCD를 하는데 있어 규칙성같은게 있는지 찾을수가 없네요 --;
    작년 대회 문제라 간단 해설 있을텐데 있으신분..ㅜㅜ
    혹은 힌트좀 주세요.
    알고리즘 자체가 생각이 안나 코드도 없습니다.;;

    http://algospot.com/judge/problem/read/GGGCCCDDD


    11년 전
3개의 댓글이 있습니다.
  • Taeyoon_Lee
    Taeyoon_Lee

    1~N사이 두 자연수의 GCD는 항상 1~N사이 자연수가 됩니다. 이것을 힌트로 삼아서 아래 질문들에 대한 결과값을 미리 계산합니다.

    1 GCD {1, 2, ... , N-1, N} => 1이 A개, 2가 B개, ... , N-1이 C개, N이 D개 나옴.
    2 GCD {1, 2, ... , N-1, N} => 1이 A개, 2가 B개....
    .
    .
    N-1 GCD ...
    N GCD ...

    예를 들어 N=3이라고 하면
    1 GCD {1, 2, 3} => 1이 3개
    2 GCD {1, 2, 3} => 1이 2개, 2가 1개
    3 GCD {1, 2, 3} => 1이 2개, 3이 1개

    M이 2라고 하면, 바로 위 결과값으로 답을 계산할 수 있습니다.
    총 1이 7개, 2가 1개, 3이 1개 남으니까요.

    M이 3이라고 하면,
    M이 2일 때까지 1이 7개 남았고, "1 GCD {1, 2, 3} => 1이 3개"니까, 7 x 3 = 21개의 1이 생길 거라고 계산할 수 있습니다.
    M이 2일 때까지 2는 1개 남았고, "2 GCD {1, 2, 3} => 1이 2개, 2가 1개"니까, 1이 2개 2가 1개 생길 테고요.
    M이 2일 때까지 3은 1개 남았고, "3 GCD {1, 2, 3} => 1이 2개, 3이 1개"니까, 1이 2개 3은 1개 생길 겁니다..
    전체적으로 1은 25개, 2는 1개, 3은 1개가 남겠네요..

    이런 식으로 쭉 계산을 해나가시면, O(N^2 + NM) 정도로 풀 수 있습니다. N과 M이 훨씬 크더라도 아주 빠르게 답을 찾는 어려운(?) 알고리즘이 존재하는데, 출제자의 의도는 아닌 것으로 보입니다.


    11년 전 link
  • jereneal20
    jereneal20

    음.. 어떤 방법을 의도했는지는 파악했지만 복잡도가 O(N^2+NM)인지는 잘 모르겠네요..
    "M이 2일 때까지 3은 1개 남았고, "3 GCD {1, 2, 3} => 1이 2개, 3이 1개"니까, 1이 2개 3은 1개 생길 겁니다.." 라는 절차에서 계산하는데 N시간이 걸리니까 결과적으로 O(N^2+N^2M)이 될거같다는 생각이 들어서요..


    11년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    N^2M이 될 것 같지만 실제로 해보면 그렇지가 않습니다. 왜냐하면, 어떤 수 K가 {1, 2, ..., N-1, N}과 하나씩 GCD계산을 해보면 결과값은 전부 K의 약수가 되고, 약수의 종류의 수는 사실 몇 개 안 되거든요. 이 부분의 저장 방식을 스마트하게(?) 구현하면 N^2M이 아닌 NM*상수 정도로 풀 수 있습니다.


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.