PS/Baekjoon Online Judge

[백준 13171] A [C]

kimyoungrok 2021. 8. 1. 22:46

백준 - 13171


풀이

비트 연산자를 사용해 풀이할 수 있다.

X의 이진수를 right shift 해주면서, A를 한 번씩 제곱해주다가, X의 이진수의 가장 끝(맨 오른쪽) 숫자가 1일 때, result에 곱해주는 방식으로 풀이했다.  

 

A = 2, X = 6일 때

A X X & 1 result
2 110 false 1
4 11 true 4
16 1 true 64
  0    

소스코드

#include <stdio.h>
#define MOD 1000000007
int main() {
    unsigned long long A, X, result = 1;
    scanf("%llu %llu", &A, &X);
    A %= MOD;
    while (X > 0){
        if (X & 1)
            result = (result*A) % MOD;
        X >>= 1;
        A = (A*A) % MOD;
    }
    printf("%d\n", result);
}

출처

 

13171번: A

음이 아닌 두 정수 A, X 가 있을 때 AX을 구하는 방법을 생각해보자. 물론 이 수는 매우 클 수 있기에, 1,000,000,007 (= 109 + 7)로 나눈 나머지를 구할 것이다. a mod x를 a를 x로 나눴을 때의 나머지라고 표

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 14731] 謎紛芥索紀 (Large) [C]  (0) 2021.08.02
[백준 14730] 謎紛芥索紀 (Small) [C]  (0) 2021.08.01
[백준 1629] 곱셈 [C]  (0) 2021.08.01
[백준 1074] Z [C]  (0) 2021.08.01
[백준 1037] 약수 [C]  (0) 2021.08.01