1008. [HNOI2008]越狱【快速幂】

时间:2021-01-06 07:49:53

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<iostream>
#include<cstdio>
using namespace std; long long Qpow(long long a,long long b,long long p)
{
long long ans=,base=a;
while (b!=)
{
if (b&!=)
ans=ans*base%p;
base=base*base%p;
b=b>>;
}
return ans;
} int main()
{
long long n,m,MOD=;
scanf("%lld%lld",&m,&n);
printf("%lld",(Qpow(m,n,MOD)%MOD-Qpow(m-,n-,MOD)*m%MOD+MOD)%MOD);
}