바이러스가 숙주의 몸속에서 1초당 P배씩 증가한다.
처음에 바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 바이러스로 불어날까? N초 동안 죽는 바이러스는 없다고 가정한다.
최종 바이러스 개수를 1000000007로 나눈 나머지를 출력하라.
1 ≤ K ≤ 108인 정수
1 ≤ P ≤ 108인 정수
1 ≤ N ≤ 106인 정수
습관처럼 int 형식으로 데이터를 입력받으면 오버플로우가 발생한다. (데이터 형식 한계 초과)
식을 구해보면 k = k * p이며, 이를 1000000007나눈 나머지를 출력해야한다.
결국 어떠한 값으로 나눈 나머지를 출력하는 조건이라면
도중에 구하는 값에서 mod 연산을 해주어도 결과는 같다.
따라서 식에서 mod연산을 같이 해주어 오버플로우를 같이 방지해주었다.
#include<iostream>
#define max 1000000007
using namespace std;
int main(int argc, char** argv)
{
// 바이러스의 수 k, 초당 증가율 p, 총 시간 n
// 최대 100000000
unsigned long long k,p,n,answer=0;
cin>>k>>p>>n;
for(int i=0;i<n;i++){
k*=(p%max);
k%=max;
}
answer=k;
cout<<answer;
return 0;
}