1008: [HNOI2008]越狱
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9839 Solved: 4237
[ Submit][ Status][ Discuss]
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)
快速幂取摸,但是要注意一下会有负数的情况。
#include<stdio.h>
#define ll long long
ll mod_pow(ll x,ll n,ll mod)
{
ll res=1;
ll t=x%mod;
while(n>0)
{
if(n&1)
res=res*t%mod;
t=t*t%mod;
n>>=1;
}
return res%mod;
}
int main()
{
ll m,n;
ll p=100003;
while(scanf("%lld%lld",&m,&n)!=EOF)
{
ll ans=mod_pow(m,n,p)%p;
ll temp=(m%p*mod_pow(m-1,n-1,p)%p)%p;
ans-=temp;
if(ans<0)//在这里判断负数
ans+=p;
printf("%lld\n",ans%p);
}
}