๐ฉ๐ปโ๐พ
[๋ฐฑ์ค/Python] 11689๋ฒ GCD(n, k) = 1 ๋ณธ๋ฌธ
1๏ธโฃ๋ฌธ์ ์ค๋ช
์์ฐ์ n์ด ์ฃผ์ด์ก์ ๋, GCD(n, k) = 1์ ๋ง์กฑํ๋ ์์ฐ์ 1 โค k โค n ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
2๏ธโฃ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ n (1 โค n โค 1012)์ด ์ฃผ์ด์ง๋ค.
3๏ธโฃ์ถ๋ ฅ
GCD(n, k) = 1์ ๋ง์กฑํ๋ ์์ฐ์ 1 โค k โค n ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.

๐ฉ๐ปโ๐ป์์ฑํ ์ฝ๋
import math
n = int(input())
answer = n
for i in range(2, int(math.sqrt(n) + 1)):
if n % i == 0: # i๊ฐ ์์ธ์์ธ์ง ํ์ธ
answer -= answer / i # i์ ๋ฐฐ์ ๊ฐ์๋งํผ ์ญ์
while n % i == 0: # i ๊ฑฐ๋ญ์ ๊ณฑ ์ญ์
n /= i
if n > 1:
answer -= answer / n
print(int(answer))
๐ก์ฝ๋ ์ค๋ช
์ด ๋ฌธ์ ๋ ์์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ณ ์ค์ผ๋ฌ ํผ ํจ์ ๊ฐ๋ ์ ์ฌ์ฉํด์ ํด๊ฒฐํ๋ค.
์ค์ผ๋ฌ ํผ ํจ์๋?
1๋ถํฐ N๊น์ง ๋ฒ์์์ N๊ณผ ์๋ก์์ธ ์์ฐ์์ ๊ฐ์์ด๋ค.
for i in range(2, int(math.sqrt(n) + 1)):
if n % i == 0:
answer -= answer / i
while n % i == 0:
n /= i
โฌ๏ธif ๋ฌธ์ ํตํด i๊ฐ ์์ธ์์ธ์ง ํ์ธํ๋ค.
๋ง์ฝ ์์ธ์๋ผ๋ฉด, answer์์ i์ ๋ฐฐ์์ ๊ฐ์๋งํผ ๋นผ์ค๋ค.
๊ทธ๋ฆฌ๊ณ while ๋ฌธ์ ํตํด i์ ๊ฑฐ๋ญ์ ๊ณฑ์ ์์ ์ค๋ค -> ์๋ฅผ ๋ค์ด n = 3ยฒ *11 (=99)์ผ ๋, 3ยฒ๋ฅผ ์์ ๊ณ 11๋ง ๋จ๊น
if n > 1:
answer -= answer / n
โฌ๏ธfor๋ฌธ์์ ์์ธ์ ๊ฐ์ ์ ๊ณฑ๊ทผ๊น์ง๋ง ํ์ธํ์ผ๋ฏ๋ก ์์ธ์๊ฐ ๋๋ฝ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. -> ์ ์์๋ฅผ ์ด์ด์ ๋ณด๋ฉด n = 11๋ก ๋จ์์ผ๋ฏ๋ก, 11์ ๋ฐฐ์์ ๊ฐ์๋ฅผ ๋นผ์ฃผ๋ ๊ณผ์
'์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 1934๋ฒ ์ต์๊ณต๋ฐฐ์ (0) | 2023.03.15 |
---|---|
[๋ฐฑ์ค/Python] 1456๋ฒ ๊ฑฐ์ ์์ (0) | 2023.03.15 |
[๋ฐฑ์ค/Python] 1747๋ฒ ์์ & ํฐ๋ฆฐ๋๋กฌ ์ ์ค์์ ์ต์๊ฐ ์ฐพ๊ธฐ (0) | 2023.03.14 |
[๋ฐฑ์ค/Python] 1181๋ฒ ๋จ์ด ์ ๋ ฌ (0) | 2023.03.10 |
[๋ฐฑ์ค/Python] 1541๋ฒ ์์ด๋ฒ๋ฆฐ ๊ดํธ (0) | 2023.03.09 |