花费了好长时间,终于刷掉了这道题。php
题目在这里(洛谷) (信息学奥赛一本通)html
嗯,没错,这是一道快速幂的题,不会快速幂点这里ios
好如今开始分析,这道题用小学奥数的思想就能够想到,直接算有多少种可能比较难,因此就算出全部的状况再减去不越狱的状况,就是越狱的状况了。全部状况就是mn,不发生的状况就是m*(m-1)(n-1),因此,发生的状况就是mn-m*(m-1)(n-1)。spa
而后就成功的算出了发生的状况数。code
代码以下htm
1 #include<iostream> 2 #define LL long long //下面LL能够代替long long 3 using namespace std; 4 LL m, n, mod=100003; 5 LL power(LL a, LL b){ 6 int ans=1, base=a; 7 while (b != 0){ 8 if (b&1 == 1) ans=(ans*base)%mod; //b&1==1 = b%2==1 9 base=(base*base)%mod; 10 b>>=1; 11 } 12 return ans; 13 } 14 int main() 15 { 16 cin>>m>>n; 17 cout<<power(m, n)-((m%mod)*power(m-1, n-1)%mod+mod)%mod<<endl; //公式 18 return 0; 19 }
这个代码样例是能够过去的,but只有10分,我也不知道为啥。blog
可是根据对输出的分析,我给快速幂多mod了几下,居然AC啦…ci
因此看下面,AC代码get
1 #include<iostream> 2 #define LL long long 3 using namespace std; 4 LL m, n, mod=100003; 5 LL power(LL a, LL b){ 6 int ans=1, base=a; 7 while (b != 0){ 8 if ((b&1) == 1) ans=(ans%mod)*(base%mod)%mod; 9 base=(base%mod)*(base%mod)%mod; 10 b>>=1; 11 } 12 return ans; 13 } 14 int main() 15 { 16 cin>>m>>n; 17 cout<<(power(m, n)-(m*power(m-1, n-1))%mod+mod)%mod<<endl; 18 return 0; 19 }