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;
}
}