※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 13171번 문제인 A이다.
문제는 아래 링크를 확인하자.
13171번: A
음이 아닌 두 정수 A, X 가 있을 때 AX을 구하는 방법을 생각해보자. 물론 이 수는 매우 클 수 있기에, 1,000,000,007 (= 109 + 7)로 나눈 나머지를 구할 것이다. a mod x를 a를 x로 나눴을 때의 나머지라고 표
www.acmicpc.net
이 문제는 exponentiation by squaring의 개념을 설명해주는 문제이다.
exponentiation by squaring을 잘 모른다면 문제의 설명을 참고하자.
아래는 제출한 소스코드이다.
#include <iostream>
using std::cin;
using std::cout;
int main()
{
long long A, X;
cin >> A >> X;
A %= 1000000007;
long long ans=1;
while (X > 0) {
if (X & 1) {
ans *= A;
ans %= 1000000007;
}
X >>= 1;
A *= A;
A %= 1000000007;
}
cout << ans;
return 0;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 13328 // C++] Message Passing (0) | 2021.01.20 |
---|---|
[BOJ 12850 // C++] 본대 산책 2 (0) | 2021.01.19 |
[BOJ 14264 // C++] 정육각형과 삼각형 (0) | 2021.01.17 |
[BOJ 7570 // C++] 줄 세우기 (0) | 2021.01.16 |
[BOJ 7567 // C++] 그릇 (0) | 2021.01.15 |