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 }
posted @ 2018-03-30 20:44  Refun  阅读(144)  评论(0编辑  收藏  举报