监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
BZOJ难得的水题
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
可能越狱的状态数,模100003取余
6种状态为(000)(001)(011)(100)(110)(111)
/* *********************************************** Author :CKboss Created Time :2015年05月09日 星期六 16时24分47秒 File Name :BZOJ1008.cpp ************************************************ */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> using namespace std; typedef long long int LL; const LL mod=100003; LL m,n; LL quickPow(LL a,LL n) { LL e=1LL; while(n) { if(n&1) e=(a*e)%mod; a=(a*a)%mod; n=n>>1; } return e%mod; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%lld%lld",&m,&n); LL ans=(quickPow(m,n)+mod-(m*quickPow(m-1,n-1))%mod)%mod; printf("%lld\n",ans); return 0; }