1008. [HNOI2008]越狱【快速幂】
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)
基本相当于快速幂模板
用总方案数减去不可能的方案数就是可能的方案数
用总方案数减去不可能的方案数就是可能的方案数
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 long long Qpow(long long a,long long b,long long p) 6 { 7 long long ans=1,base=a; 8 while (b!=0) 9 { 10 if (b&1!=0) 11 ans=ans*base%p; 12 base=base*base%p; 13 b=b>>1; 14 } 15 return ans; 16 } 17 18 int main() 19 { 20 long long n,m,MOD=100003; 21 scanf("%lld%lld",&m,&n); 22 printf("%lld",(Qpow(m,n,MOD)%MOD-Qpow(m-1,n-1,MOD)*m%MOD+MOD)%MOD); 23 }