문제 링크
- http://icpc.me/9359
문제 출처
- 2011 LCPC B번
사용 알고리즘
- BitMask
풀이
처음에는 오일러 파이 함수를 생각해봤으나, 구현이 귀찮아서 다른 방법을 이용했습니다.
n을 소인수 분해를 하기 위해서는 n 이하의 소수를 구해야 합니다. 에라토스테네스의 체를 이용하면 O(n lg lg n)에 구할 수 있지만, n이 최대 10억입니다.
그러나 n의 가장 큰 소인수는 몰라도 두 번째로 큰 소인수부터는 항상 sqrt(n)보다 작습니다. 그러므로 10만 정도까지만 구해도 괜찮습니다.
n이 최대 10억이라는 것은, 소인수가 최대 9개 밖에 없다는 것을 의미합니다. 그러므로 2^9번의 계산을 통해 포함-배제를 사용하면 빠르게 답을 구할 수 있습니다.
전체 코드
1 |
|