题目描述
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
输入
输入两个整数M,N。1<=M<=10^8,1<=N<=10^12。
输出
可能越狱的状态数,模100003取余
样例输入
2 3
样例输出
6
题解
越狱状态数=总状态数-不越狱状态数=\(m^{n}-m\cdot\left(m-1\right)^{n-1}\)
快速幂+取模
1 #include<cstdio> 2 const int Mod=100003; 3 int m;long long n; 4 int pow(int base,long long exp){ 5 int ans=1; 6 while(exp){ 7 if(exp&1) ans=1ll*ans*base%Mod; 8 base=1ll*base*base%Mod; 9 exp>>=1; 10 } 11 return ans; 12 } 13 int main(){ 14 scanf("%d%lld",&m,&n); 15 printf("%d",((pow(m,n)-1ll*m*pow(m-1,n-1))%Mod+Mod)%Mod); 16 return 0; 17 }