๐Ÿ‘ฉ๐Ÿปโ€๐ŸŒพ

[๋ฐฑ์ค€/Python] 11689๋ฒˆ GCD(n, k) = 1 ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€/Python] 11689๋ฒˆ GCD(n, k) = 1

์ฅฌ์Šค์ด 2023. 3. 14. 20:53
728x90

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์˜ ๋ฐฐ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋นผ์ฃผ๋Š” ๊ณผ์ •

728x90
Comments