http://www.elijahqi.win/archives/1851
Description
监狱有连续编号为1…N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果
相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越狱的状态数,模100003取余
Sample Input
2 3
Sample Output
6
HINT
6种状态为(000)(001)(011)(100)(110)(111)
Source
凭借我一己之力想的题qwq (我很水
总共组合方案是m^n种情况 因为不能有重复的 所以一种宗教就是 (m-1)^(n-1)然后一共m种宗教所以再乘个m 然后用总数一减去即可
#include<cstdio>
#define ll long long
#define mod 100003
ll n,m,ans1=1,ans2=1;
int main(){
freopen("bzoj1008.in","r",stdin);
scanf("%lld%lld",&m,&n);ll base=m;
for (ll t=n;t;t>>=1,(base*=base)%=mod) if (t&1) (ans1*=base)%=mod;base=m-1;
for (ll t=n-1;t;t>>=1,(base*=base)%=mod) if(t&1) (ans2*=base)%=mod;(ans2*=m)%=mod;
ans1-=ans2;ans1+=mod;ans1%=mod;
printf("%lld",ans1);
return 0;
}