๐ ํ์ด
A์ B์ C๊ฐ ๊ณต๋ฐฑ์ ๋๊ณ ์ ๋ ฅ๋๋ค. ์ฐ๋ฆฌ๋ (A^B)%C ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค. ๋จ A,B,C ๋ ๋ชจ๋ 2,147,483,647 ์ดํ์ ์์ฐ์์ด๋ค.
์์ ๋ฒ์๊ฐ ๋ฐฉ๋ํ๋ค. ๋๋ฌธ์ 21์ต๋ฒ ๊ณฑํ๋ค๋ฉด O(N)์ด์ฌ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋๋จธ์ง ๋ถ๋ฐฐ๋ฒ์น๊ณผ ์ง์๋ฒ์น์ ์ฌ์ฉํ์ฌ ๋ต์ ๊ตฌํ์๋ค.
๐ ์ง์๋ฒ์น
(A^m)^n = (A^(m * n))
๐ ๋๋จธ์ง ๋ถ๋ฐฐ ๋ฒ์น
(AxB) % C = (A%C) * (B%C) % C
์ฐ์ ์ง์ ๋ฒ์น์ ์ฌ์ฉํ์ฌ ๋ถํ ์ ๋ณต์ ํ๋ค. 2 ^ 32 ์ ๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ 2๋ฅผ 32๋ฒ ๊ณฑํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง ์ง์๋ฒ์น์ ์ฌ์ฉํ์ฌ (2^16)^2 16๋ฒ ๊ณฑํ ๊ฒ์ ์ ๊ณฑํ๋ ๋ฐฉ์์ผ๋ก ํ๋ฉด ์ด 17๋ฒ์ ์ฐ์ฐ์ผ๋ก ์ค์ผ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ๊ณ์ ์ฌ์ฉํ๋ฉด 10๋ฒ, ์ฐ์ฐ 7๋ฒ๋ง์ ๊ฒฐ๊ณผ์ ๋๋ฌํ ์ ์๋ค.
๋ง์ฝ B๊ฐ 1์ด๋ผ๋ฉด A 1์ ๊ณฑ์ด๋ผ๋ ์๋ฏธ์ด๊ธฐ์ ๋ฐ๋ก ๊ทธ๋ฅ A%C๋ฅผ ๋ฆฌํดํด์ค๋ค.
์์ ๋ฅผ ๊ฐ์ง๊ณ ์ค๋ช ํด๋ณด์
A : 10, B : 11, C : 12
์์ ๋ ์ฐ์ B๊ฐ ํ์์ด๋ค.
((A^5)*(A^5)*A)%C ๋ฅผ ์ํํด์ค์ผ ํ๋ค.
ํ๋ฒ ๋ ์งํํ๋ฉด,,
(((A^2)*(A^2)*A)*((A^2)*(A^2)*A)*A)%C ์ด๋ ๊ฒ ๋๋ค!
๋ฌธ์๋ฅผ ๋ค์ ์ซ์๋ก ๋ฐ๊ฟ๋ณด์๋ฉด,,
(10^5)(10^5)*10 ์ด ๊ฒฝ์ฐ๋ B๊ฐ ํ์์ผ ๊ฒฝ์ฐ์ด๋ค. ์ ๊ณฑ๊ผด์ A๋ฅผ ํ๋ฒ ๋ ๊ณฑํด์ค๋ค.
B ๊ฐ ์ง์๋ผ๋ฉด A๋ฅผ ํ๋ฒ ๋ ๊ณฑํด์ฃผ์ง ์์๋ ๋๋ค.
๐ป ์ฝ๋
def solve(a,b,c):
if b == 1: # ๊ฑฐ๋ญ์ ๊ณฑ์ ํ ํ์์์ ๋ฐ๋ก a์ ๋๋จธ์ง ๋ฆฌํด
return a%c
else:
k = solve(a, b//2, c)
if b%2 == 0: # b๊ฐ ์ง์๋ผ๋ฉด
return (k*k)%c
else: # b๊ฐ ํ์๋ผ๋ฉด
return (k*k*a)%c
a,b,c = map(int, input().split())
print(solve(a,b,c))
๐ ๋ฌธ์ ๋งํฌ : ๊ณฑ์
1629๋ฒ: ๊ณฑ์
์ฒซ์งธ ์ค์ A, B, C๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์์๋๋ก ์ฃผ์ด์ง๋ค. A, B, C๋ ๋ชจ๋ 2,147,483,647 ์ดํ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
๋์๋ฐ์ ๊ธ๋ค : ๊ฐ๋ฐ ํ์ฝ๊ณ , grace0st
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2606๋ฒ: ๋ฐ์ด๋ฌ์ค - ํ์ด์ฌ (0) | 2022.05.19 |
---|---|
[๋ฐฑ์ค] 1918๋ฒ: ํ์ํ๊ธฐ์ - ํ์ด์ฌ (0) | 2022.05.16 |
[๋ฐฑ์ค] 14425๋ฒ: ๋ฌธ์์ด ์งํฉ - ํ์ด์ฌ (0) | 2022.05.15 |
[๋ฐฑ์ค] 7795๋ฒ: ๋จน์ ๊ฒ์ธ๊ฐ ๋จนํ ๊ฒ์ธ๊ฐ - ํ์ด์ฌ (0) | 2022.05.09 |
[๋ฐฑ์ค] 1935๋ฒ: ํ์ ํ๊ธฐ์2 - ํ์ด์ฌ (0) | 2022.05.08 |