※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 13171번 문제인 A이다.
문제는 아래 링크를 확인하자.

www.acmicpc.net/problem/13171

 

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

+ Recent posts