51nod 1513-3的幂的和(费马小定理+快速幂)
生活随笔
收集整理的這篇文章主要介紹了
51nod 1513-3的幂的和(费马小定理+快速幂)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input
輸入一個數N(0 <= N <= 10^9)
Output
輸出:計算結果
Sample Input
3
Sample Output
40
思路:根據等比數列的前N項和公式可得到原式等于((3的n次方+1)/2)%1e9+7,用快速冪求出3的n次方,再由費馬小定理求出2的逆元(觀察也可知道,2對與1000000007的逆元為500000004)。
代碼:
#include <iostream> using namespace std; typedef long long ll; const ll MOD=1e9+7; ll quickpow(ll a,ll b) {int ans=1;a=a%MOD;while(b){if(b & 1) ans=ans*a%MOD;b>>=1;a=a*a%MOD;}return ans; } int main() {int n;ll m,q;cin>>n;m=quickpow(3,n+1)-1;q=quickpow(2,MOD-2);cout<<m*q%MOD<<endl;return 0; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的51nod 1513-3的幂的和(费马小定理+快速幂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51nod 1256 乘法逆元(扩展欧几
- 下一篇: LightOJ 1078 Integer