반응형
문제
자연수 A를 B번 곱한 수를 알고 싶다. 단 구하려는 수가 매우 커질 수 있으므로 이를 C로 나눈 나머지를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 모두 2,147,483,647 이하의 자연수이다.
출력
첫째 줄에 A를 B번 곱한 수를 C로 나눈 나머지를 출력한다.
<코드>
#include<iostream>
#include<cmath>
using namespace std;
long long A, B, C;
long long sum = 1;
long long half;
long long solve(int x)
{
if (x == 0) return 1;
if (x % 2 == 1) return A * solve(x - 1) % C;
else
{
half = solve(x / 2);
return half * half % C;
}
}
int main()
{
cin >> A >> B >> C;
cout << solve(B) % C;
}
문제풀이
B가 짝수일 경우 A^B = A^(B/2) * A^(B/2) 이고
(A*B) % C = (A%C * B%C) %C 의 성질을 이용
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 프로그래머스 - 기능개발 (스택/큐) (0) | 2020.12.18 |
---|---|
[C/C++] 백준 2740번 - 행렬 곱셈 (0) | 2020.12.17 |
[C/C++] 백준 1780번 - 종이의 개수 (분할 정복) (0) | 2020.12.17 |
[C/C++] 백준 15792번 - A/B - 2 (2) | 2020.12.14 |
[C/C++] 백준 1992번 - 쿼드트리(분할정복) (0) | 2020.12.12 |