C++/문제풀이 기록
[BOJ 1629, 쉬움] 곱셈 (C++)
fepick포트폴리오
2023. 1. 17. 00:06
개인적인 난이도
쉬움
알면 1분만에 풀고 모르면 그냥 틀린다
매우 중요한 개념이 2 가지 들어있다. 정수론(모듈러 산술) & 분할정복(log N)
몰라서 2번 틀렸다
처음엔 정수론 몰라서 오버플로우로 틀리고 두번째엔 분할정복 몰라서 시간초과로 틀림
성공한 풀이)
핵심 1) 모듈러연산은 신기하게 덧셈 뺄셈 곱셈 분배법칙이 가능하다.
핵심 2) 거듭제곱 계산(pow) 는 분할정복을 이용해 계산하면 log N 안에 끝남
성공한 코드
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
#define ll long long
using namespace std;
int main(void) {
fastio;
ll A,B,C;cin>>A>>B>>C;
A%=C;
ll ans = 1;
while (B)
{
if(B%2==1){
ans*=A;
ans%=C;
}
B=B>>1;
A*=A;A%=C;
}
cout<<ans%C;
return 0;
}