【快速冪】P3197越獄

花費了好長時間,終於刷掉了這道題。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 }
相關文章
相關標籤/搜索