문제 링크
- http://icpc.me/11689
풀이
N의 소인수를 모두 구한 뒤, 포함배제를 잘 사용하면 됩니다.
N은 최대 10^12입니다. 1부터 sqrt(N)까지의 소수만 구해놓는다면, N의 소인수를 구할 수 있습니다.
N의 가장 큰 소인수가 sqrt(N)보다 작다면, 모든 소인수는 sqrt(N)보다 작습니다.
만약 가장 큰 소인수가 sqrt(N)보다 크더라도, 두 번째로 큰 소인수는 sqrt(N)보다 작다는 사실을 알 수 있습니다.
그러므로 10^6정도까지의 소수를 에라토스테네스의 체를 이용해 구해줍시다.
소인수를 구하는 코드는 아래처럼 작성할 수 있습니다.
1 |
|
10^12 이하의 수는 소인수가 아무리 많아도 11개를 넘지 않습니다. 그러므로 비트마스크를 이용해 포함배제를 해주면 소인수의 개수를 찾을 수 있습니다.
자세한 구현은 코드를 봐주세요.
전체 코드
1 |
|