[BOJ][๐ก4][๋ฐฑ์ค#26092] ์ํ์ ์ธ ์ต์ ๊ณตํต ์กฐ์
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold IV
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
$10^{12}$ ๊ฐ์ ์ ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค. ํธ๋ฆฌ์ ๊ฐ ์ ์ ์ $1$๋ฒ๋ถํฐ $10^{12}$๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ $1$๋ฒ ์ ์ ์ ๋ฃจํธ์ด๋ค. ์ด ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํน์ํ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋ค.
$2$ ์ด์ $N$ ์ดํ์ ์ ์ $x$์ ๋ํด $x$์ ๊ฐ์ฅ ์์ ์์ธ์๋ฅผ $p$๋ผ๊ณ ํ์. $x$๋ฒ ์ ์ ์ ๋ถ๋ชจ ์ ์ ์ $\frac{x}{p}$๋ฒ ์ ์ ์ด๋ค.
๋ ์ ์ ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์, ๋ ์ ์ ์ ๋ชจ๋ ์์์ผ๋ก ๊ฐ์ง๋ฉด์ ๊น์ด๊ฐ ๊ฐ์ฅ ๊น์ ์ ์ ์ผ๋ก ์ ์ํ๋ค. ๋ ์ ์ $a$์ $b$๊ฐ ์ฃผ์ด์ก์ ๋, $a$๋ฒ ์ ์ ๊ณผ $b$๋ฒ ์ ์ ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ ๋ฒํธ๋ฅผ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ $a$์ $b$๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. $(1\leq a,b\leq 10^{12})$
์ถ๋ ฅ
์ฒซ์งธ ์ค์ $a$๋ฒ ์ ์ ๊ณผ $b$๋ฒ ์ ์ ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
1 4
์ถ๋ ฅ
1
์์ 2
์ ๋ ฅ
21 49
์ถ๋ ฅ
7
์์ 3
์ ๋ ฅ
30 20
์ถ๋ ฅ
5
My Sol
def check_parent(N):
S = set([1, N])
while N > 1:
flag = 0
for n in range(2, int(N**(1/2))+1):
if N%n: continue
N = N//n
S.add(N)
flag = 1
break
if not flag: break
return S
A, B = map(int, input().split())
A_Set = check_parent(A)
B_Set = check_parent(B)
U_Set = A_Set & B_Set
print(max(list(U_Set)))
์
๋ ฅ์ด 10์ 12์น์ด๋ฏ๋ก, ์์ํ์ ์์ ์๋ผํ ์คํ
๋ค์ค์์ฒด
์๊ณ ๋ฆฌ์ฆ์ฒ๋ผ ์ ๊ณฑ๊ทผ๊น์ง ๋๋ ๋ณด๋ ๋ฐฉ์์ ํ์ฉํ๋ค. ๊ทธ๋ ๋ค๋ฉด ํ ๋ฐ๋ณต๋น 10์ 6์น, ์ฆ 100๋ง์ผ๋ก ์ฐ์ฐ์๊ฐ ์ด๊ณผ๋ฅผ ํผํ ์ ์์ผ๋ฉฐ, ์ต๋ 100๋ง์ ์๊น์ง N์ ๋๋ ๋ณด๋ฉฐ ๋๋์ด ๋จ์ด์ง๋์ง ํ์ธํ๋ค.
- ์ ๋ ฅ์ ์ฒ๋ฆฌํด ๋ ์๋ฅผ ํ์ธํ๋ค.
- ์๋ฅผ ๊ฐ์ฅ ์์ ์์ธ์๋ก ๋๋๋ฉฐ ์งํฉ์ ๋ฃ๋๋ค. ๋ถ๋ชจ ์ ์ ์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด ๋ถ๋ชจ ์ ์ ์ ๋ถ๋ชจ ์ ์ ์ ๋ค์ ๊ตฌํด๊ฐ๋ ๋ฐ๋ณต์ ์ค์ํ๋ค.
- ์ด ๋ฐ๋ณต์ ์์ธ์๋ก ๋๋ ์ ์๋ ์์๊ฐ ๋๊ฑฐ๋ 1์ด ๋๋ฉด ์ข ๋ฃ๋๋ค. ์ด๋๊น์ง ์งํฉ์ ๊ตฌํ ๋ค ๋ฐํํ๋ค.
- ๋ ์์ ๋ํ ๋ถ๋ชจ ์ ์ ์งํฉ์ ๋ชจ๋ ๊ตฌํ ๋ค, ๊ต์งํฉ์ ๊ตฌํ๋ค. ์ต์์ ์ ์ ์ธ 1๋ฒ ์ ์ ์ ๊ณต์ ํ๋ฏ๋ก ๋ชปํด๋ 1๋ฒ ์ ์ ์ ๊ฐ์ง ๊ต์งํฉ์ด ์๊ธด๋ค. ์ด ๊ต์งํฉ์ ๊ณต์ ํ๋ ๋ถ๋ชจ ์ ์ ์ด๋ค.
- ์ด ๊ต์งํฉ ์์์ ์ต๋๊ฐ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ