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)
每个犯人都有m种宗教可选,所以总方案数是 mn种。
想发生越狱不好想,思考如何不会越狱。
若第1个犯人信仰某种宗教,一共m个选择。第2个则只有m-1个选择,往后均为m-1个选择。
易得出结论,答案是:
mn−m∗(m−1)n−1
#include<stdio.h>
typedef long long ll;
const ll mod=1000000007;
ll qpow(ll n,ll m)
{
ll ans=1;
n%=mod;
while(m)
{
if(m&1)
ans=(n*ans)%mod;
n=(n*n)%mod;
m/=2;
}
return ans;
}
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
printf("%lld\n",(qpow(m,n)-(qpow(m-1,n-1)*(m%mod)%mod)+mod)%mod);
return 0;
}