๐ ๋ฌธ์
์ธ ์ ์ a, b, L์ด ์ฃผ์ด์ก์ ๋, LCM(a, b, c) = L์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ c๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. LCM(a, b, c)๋ a, b, c์ ์ต์๊ณต๋ฐฐ์์ด๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ a, b, L์ด ์ฃผ์ด์ง๋ค. (1 ≤ a, b ≤ 106, 1 ≤ L ≤ 1012)
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ c๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ, ๊ฐ๋ฅํ c๊ฐ ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
์ด์ ์ ํ์๋ ์ต๋ ์ต๋ ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ ๋ฌธ์ ์ ๋น์ทํ ์ ํ๊ฐ์์ ํ์ด๋ณด์๋ค.
์ด๋ฒ ๋ฌธ์ ๋ a์ b ๊ทธ๋ฆฌ๊ณ L ์ด ์ฃผ์ด์ง ๋ lcm(a,b,c) == L ์ ๋ง์กฑํ๋ c์ ์ต์๊ฐ์ ๊ตฌํ๋ฉด ๋๋ค.
์ฒ์์ ๋ฏธ๋ฆฌ a์ b์ ์ต์๊ณต๋ฐฐ์๋ฅผ ๊ตฌํ ๋ค์ while ๋ฌธ์ ๋๋ ค์ c์ ๊ฐ์ ํ๋์ฉ ์ฌ๋ ค L์ ์ฐพ์๋๋ฐ, TLE ํ์ ๋ฐ์๋ค.
๊ทธ๋์ c += 1 ์ด ์๋ c += lcm(a,b)//10 ์ ํ์๋๋ฐ๋ TLE ํ์ ๋ฐ์๋ค.
๋ค๋ฅธ ๋ถ์ ์ฝ๋๋ฅผ ๋ณด๋ c *= L//lcm(a,b) ์ด ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ด์๋ค.
์ฌ๋ฌ๋ฒ TLE ๋ฐ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์์ํ์๋ค.
์ฝ๊ฐ์ ๊ณ ๋ฏผ ๋์ ์ฐพ์ ๋ฐฉ๋ฒ์ ์ด๊ฒ์ด๋ค.
L์ ์ฝ์๋ฅผ ๋ชจ๋ ์ฐพ๊ณ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ํ๋์ฉ ๋ฃ์ด๋ณด๋ ๊ฒ์ด๋ค. L์ ์ฝ์๋ฅผ ์ฐพ์ ๋๋ ์ฒ์๋ถํฐ ๋๊น์ง ๋๋ ค๋ฒ๋ฆฌ๋ฉด ์ด๋๋ ์๊ฐ์ด๊ณผ ํ์ ์ ๋ฐ์ ๊ฒ์ด๋ค. ๊ทธ๋์ ์ ๊ณฑ๊ทผ๊น์ง ๋๋ ค ์๊ฐ๋ณต์ก๋๋ฅผ O(sqrt(n))๋ก ์ค๊ณํ์ฌ ์ฝ์๋ฅผ ์ฐพ์๋ค.
L์ ์ฝ์๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ lcm(ab, c) == L ์ธ ๊ฒ์ ์ฐพ์๋ค. (์ด๋ c๋ ์ฝ์๋ฆฌ์คํธ์ ๋ฐ์ดํฐ)
๐ป ์ฝ๋
import math
a,b,L = map(int,input().split())
def divisor(n): # L์ ์ฝ์๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
can = []
for i in range(1, int(math.sqrt(n))+1): # ์ ๊ณฑ๊ทผ๊น์ง๋ง ๋๋ฆผ
if n%i==0: # ์ฝ์๋ผ๋ฉด
can.append(i)
can.append(n//i)
return sorted(can) # ์ ๋ ฌ
if math.lcm(a,b) == L: #a์ b์ ์ต์๊ณต๋ฐฐ์๊ฐ ์ด๋ฏธ L์ด๋ผ๋ฉด c๋ 1
print(1)
elif L%math.lcm(a,b)!=0: # lcm(a,b,c) ==L ์ด ๋ ์ ์๋ค๋ฉด -1 ์ถ๋ ฅ
print(-1)
else:
ab = math.lcm(a,b)
for c in divisor(L): # L์ ์์๋ฆฌ์คํธ
if math.lcm(ab, c)==L: # ๋ง์กฑํ๋ค๋ฉด
print(c) # c ์ถ๋ ฅํ ์ข
๋ฃ
break
๐ญ ์ํ์ฐฉ์ค
๋ฉ๋ชจ๋ฆฌ ๋์ด๋๊ณ ์๊ฐ ๋์ด๋ ์ฝ๋๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค ์ฝ๋์ธ๋ฐ, ์คํ๋ ค ์ญํจ๊ณผ๊ฐ ๋ฌ๋ค.
๐ ๋ฌธ์ ๋งํฌ ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1043๋ฒ: ๊ฑฐ์ง๋ง - ํ์ด์ฌ (0) | 2022.07.26 |
---|---|
[๋ฐฑ์ค] 10026๋ฒ: ์ ๋ก์์ฝ - ํ์ด์ฌ (0) | 2022.07.14 |
[๋ฐฑ์ค] 25432๋ฒ: ์ต๋ ์ต์๊ณต๋ฐฐ์ - ํ์ด์ฌ (0) | 2022.07.09 |
[๋ฐฑ์ค] 1715๋ฒ: ์นด๋ ์ ๋ ฌํ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.08 |
[๋ฐฑ์ค] 9375๋ฒ: ํจ์ ์ ์ ํด๋น - ํ์ด์ฌ (0) | 2022.07.07 |