标签:int 多少 while 说明 range fine 情况 blog 组合
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
输出格式:可能越狱的状态数,模100003取余
6种状态为(000)(001)(011)(100)(110)(111)
ans=所有组合(mn)-所有合法情况(m*(m-1)(n-1));
然后快速幂搞一搞就好了;
1 #include<cstdio> 2 #define LL long long 3 const LL mod=1e5+3; 4 LL m,n; 5 LL FP(LL x,LL y){ 6 LL ret=1; 7 while(y){ 8 if(y&1) ret=(ret*x)%mod; 9 y>>=1,x=(x*x)%mod; 10 } 11 return ret%mod; 12 } 13 int main(){ 14 scanf("%lld%lld",&m,&n); 15 printf("%lld\n",(FP(m,n)-(m*FP(m-1,n-1))%mod+mod)%mod); 16 return 0; 17 }
标签:int 多少 while 说明 range fine 情况 blog 组合
原文地址:http://www.cnblogs.com/J-william/p/7725903.html