51Nod 1013 3的冪的和 快速冪+逆元
阿新 • • 發佈:2018-12-18
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
收起
輸入
輸入一個數N(0 <= N <= 10^9)
輸出
輸出:計算結果
輸入樣例
3
輸出樣例
40
等比數列求和公式:
Sum=a1*(1-q^n)/(1-q),所以可以轉化為:
Sum=(3^(n+1)-1)/2;
因為數太大,需要利用逆元來代替/2運算。
因為2與1000000007互質,所以可以利用公式2^(Mod-2)求出逆元。
所以最終公式為:
Sum=(3^(n+1)-1)*(2^(Mod-2))%Mod;
套用快速冪求出答案。
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; const ll Mod=1000000007; ll n; ll Fast (ll a,ll b) { ll sum=1; while (b) { if(b&1) { sum=sum*a%Mod; } a=a*a%Mod; b/=2; } return sum; } int main() { scanf("%lld",&n); ll re=(Fast(3,n+1)-1)*Fast(2,Mod-2)%Mod; printf("%lld\n",re); return 0; }