Coding_Test 연습/Softeer

[현대 소프티어] (C++) 수퍼바이러스

Codetesing 2022. 10. 31. 13:01

정수론에 관한 문제이다.

새로운 이론은 없으며 다만 연산해야 하는 제곱수 N을 log(N)으로 줄여 연산하였다.

MOD는 제곱에 대하여 결합과 교환법칙이 성립하므로 쉽게 풀 수 있는 문제이다.

#include<iostream>

#define MOD 1000000007

using namespace std;

int main(int argc, char** argv)
{
	long long N, K, P;

	cin >> K >> P >> N;

	N *= 10;
	int cur = 1;
	
	while(1) {
		if(N == 1)
			break;
		
		if(N % 2 == 0)
		{
			P = P * P;
			P %= MOD;
			N /= 2;
		}
		else
		{
			K *= P;
			K %= MOD;
			N--;
		}
	}

	long long out = K * P;
	out %= MOD;

	cout << out << '\n';

	return 0;
}