
1. 문제 풀이 아이디어
- 분할 정복을 이용하여 거듭 제곱을 빠르게 계산하는 방식을 사용하여 문제를 해결한다.
2. 나의 정답 코드
using (StreamReader sr = new StreamReader(Console.OpenStandardInput()))
using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()))
{
string[] split = sr.ReadLine().Split();
long a = long.Parse(split[0]) % long.Parse(split[2]);
long b = long.Parse(split[1]);
long c = long.Parse(split[2]);
sw.WriteLine(solve(b));
long solve(long n)
{
if (n == 1)
{
return a;
}
long result = solve(n / 2);
result = result * result % c;
if (n % 2 == 1)
{
result = result * a % c;
}
return result;
}
}
3. 정리
solve(n)
함수는 분할 정복을 활용하여a^b % c
를 계산한다.
n == 1
인 경우a
를 반환한다.
n
을 절반으로 나누어solve(n / 2)
를 호출하고, 결과를 제곱하여c
로 나눈다.
n
이 홀수라면a
를 한 번 더 곱한 후c
로 나눈다.
- 최종적으로
solve(b)
의 결과를 출력한다.
Share article