백준 9359 - 서로소

2022. 10. 22.

문제

자연수 NN이 주어졌을 때, AA보다 크거나 같고, BB보다 작거나 같은 수 중에서 NN과 서로소인 것의 개수를 구하는 프로그램을 작성하시오.

두 정수를 나눌 수 있는 양의 정수가 11밖에 없을 때, 두 정수를 서로소라고 한다. 즉, 두 수의 최대공약수가 11이면 서로소이다. 11은 모든 정수와 서로소이다.

풀이

[A,B][A, B]에서 NN과 서로소인 것의 갯수는 전체 개수에서 서로소인 것의 개수를 빼주면 된다. NN과 서로소인 것은 NN의 소인수 중 하나의 배수이면 된다.

N의 소인수를 p1,p2,p3,,pkp_1, p_2, p_3, \cdots, p_k라고 할 때

Xpi=[A,B]에서 pi의배수인 숫자의 집합X_{p_i} = [A, B]에서\ p_i의 배수인\ 숫자의\ 집합

라고 한다면 포함 배제의 원리를 이용해서 다음과 같이 풀어 쓸 수 있다.

n(Xp1Xp2Xpk)=+n(Xp1)+n(Xp2)+n(Xp1Xp2)n(Xp1Xp3)+n(Xp1Xp2Xp3)+\begin{aligned} & \mathrm{n}(X_{p_1} \cup X_{p_2} \cup \cdots \cup X_{p_k}) = \\ & + \mathrm{n}(X_{p_1}) + \mathrm{n}(X_{p_2}) + \cdots \\ & - \mathrm{n}(X_{p_1} \cap X_{p_2}) - \mathrm{n}(X_{p_1} \cap X_{p_3}) - \cdots \\ & + \mathrm{n}(X_{p_1} \cap X_{p_2} \cap X_{p_3}) + \cdots \end{aligned}

이 때 NN의 크기가 10910^9까지 이므로 소인수의 수는 많아봤자 1010개 정도 밖에 되지 않는다. 따라서 모든 소인수 조합을 돌면서(210=1024\approx 2^{10} = 1024) 포함 배제의 원리를 적용시켜주면 된다.

링크

분류

  • 포함 배제의 원리
Copyright (c) 2024, Jisu Sim. All rights reserved.