[๋ฐฑ์ค(BOJ)] ๊ณฑ์ (1629) C++
๋ฌธ์ : BOJ_1629๋ฒ ๊ณฑ์
๋ฌธ์ ์ค๋ช
๋ถํ ์ ๋ณต
A, B, C๊ฐ ์ฃผ์ด์ง๊ณ , A๋ฅผ B๋ฒ ๊ณฑํ ๊ฐ์ C๋ก ๋๋ ๊ฐ์ ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
B๊ฐ ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์, B์ ๋ง๊ฒ ์ฌ๋ฌ ๋ฒ ๊ณฑํด์ฃผ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฉ๋๋ค.
Solution
n์ด ์ง์๋ผ๋ฉด, A^n = A^(n/2) * A^(n/2)
n์ด ํ์๋ผ๋ฉด, A^n = A^(n/2) * A^(n/2) *A
์ธ ๊ฒ์ ์ด์ฉํ์ฌ ๋ถํ ์ ๋ณต ํฉ๋๋ค.
๊ฐ์ ํฌ๊ธฐ๋ ์ด ๋ฌธ์ ์์ ๋งค์ฐ ์ค์ํ๋ฐ, A, B, C์ ๊ฐ์ด intํ์ ์ต๋๊ฐ๊น์ง ๊ฐ๋ฅํ๋ฏ๋ก, long longํ์ผ๋ก ํด์ฃผ๊ณ ,
mod C๋ฅผ ๊ณ์ ์ํํด ์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด ๋ฌธ์ ์์ ์๊พธ ์ค๋ต ์ ์ถ์ด ๋ง์ด ๋๋๋ฐ, n์ด ํ์์ผ ๋ A^n = A^(n/2) * A^(n/2) *A
์ธ ์กฐ๊ฑด์์, (A^(n/2)*A^(n/2)*A)
๋ฅผ ๊ทธ๋๋ก ๋ฌถ์ด์ mod C๋ฅผ ํด์ฃผ๋ฉด, ์ธ ๊ฐ์ ์์ด ๊ณฑํด์ง๋ ๋์ ์ด๋ฏธ ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก
์ค๋ต ์ฒ๋ฆฌ๊ฐ ๋์ต๋๋ค. ((A^(n/2) _ A^(n/2))%C _ A) % C ์ ๊ฐ์ ์์ผ๋ก, ๋ ์๋ฅผ ๋จผ์ ๊ณฑํ๊ณ mod C๋ฅผ ํด์ฃผ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Description
- ๋ฌธ์ ์ ๋์ค๋ ๋ชจ๋ ๋ณ์์ ํจ์์ ๋ฐํ๊ฐ ๋ฐ ์ธ์๋ฅผ ๋ชจ๋ long longํ์ผ๋ก ์ฒ๋ฆฌ
- ์ฌ๊ท์ ํ์์ผ๋ก ๊ณฑํด์ง๋ ํ์๊ฐ 1์ผ ๋๊น์ง ๋ด๋ ค๊ฐ๋ ํจ์๋ฅผ ์ฌ์ฉ
#include <iostream>
using namespace std;
long long A, B, C;
long long func(long long val, long long num);
// val -> ๊ณฑํด์ง๋ ๊ฐ, num -> ๊ณฑํด์ง๋ ํ์
int main(void) {
cin >> A >> B >> C;
A = A % C;
long long result = func(A, B) % C;;
cout << result << '\n';
}
long long func(long long val, long long num) {
if (num == 1) return val % C;
long long nowVal = func(val, num / 2) % C;
if ((num % 2) == 0) return (nowVal * nowVal) % C;
else return ((nowVal * nowVal % C) * val) % C;
// ์ค๋ฒํ๋ก์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด %C๋ฅผ ๋ ๋ฒ ํด์ค๋ค.
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ์ ํ๋ฒํธ ๋ชฉ๋ก(5052) (0) | 2022.03.07 |
---|---|
[BOJ] ํ์คํ ๊ทธ๋จ(1725) (0) | 2022.03.07 |
[BOJ] ํ์์ค๋ฐฐ์ (1931) (0) | 2022.03.06 |
[BOJ] ์ซ์ ์ผ๊ตฌ(2503) (0) | 2022.03.06 |
[BOJ] ๋ฏธ์ธ๋จผ์ง ์๋ !(17144) (0) | 2022.03.06 |