1013 3的幂的和

求:3^0 + 3^1 +…+ 3^(N) mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Input示例
3
Output示例
40
这题题目不难,套用等比数列的前
n项和的公式便可得知,Sn=a1*(1-q^n)/(1-q)
要用到快速幂取余和乘法逆元

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=1000000007; 
long long X,y;
long long gcd(long long a,long long b)
{
    int t,d;
    if(b==0)
    {
        X=1;
        y=0;   //不明处1
return a;
    }
    d=gcd(b,a%b);
    t=X;
    X=y;
    y=t-(a/b)*y;  
return d;
}
ll qpow(long long x,long long a,long long p)
{
    ll ans=1;
    x=x%p;
    while(a>0)
    {
        if(a&1)
        ans=(ans*x)%p;
        x=(x*x)%p; 
        a>>=1; 
    }
    return ans;
}  
int main()
{
    long long n;
    while(scanf("%lld",&n)!=EOF)
    {
        gcd(2,mod);//用欧几里得扩展地理2mod1000000007的逆元
        if(X<0)
        X+=mod;
        n++; 
        ll ans=(qpow(3,n,mod)-1)*X%mod;
        cout<<ans<<endl; 
    } 
}
posted @ 2016-01-03 22:08  __NaCl  阅读(139)  评论(0编辑  收藏  举报