https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013&judgeId=598857
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
收藏
关注
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Input示例
3
Output示例
40
求乘法逆元用费马小定理:当模为素数,a的逆元为pow_mod(a,mod-2).
#include<iostream>
#include<string.h>
#define ll long long
#define mod 1000000007
using namespace std;
ll quick_pow(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
b/=2;
a=(a*a)%mod;
}
return ans;
}
ll exgcd(ll a,ll b,ll &x, ll &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
exgcd(b,a%b,x,y);
ll temp=x;
y=x;
y=temp-a/b*y;
}
int main()
{
ll n,sum=0,x,y;
cin>>n;
sum=(quick_pow(3,n+1)-1);
sum=(sum*quick_pow(2,mod-2)) % mod;
cout<<sum<<endl;
return 0;
}