分析
明显是等比数列求和。
等比数列前n 项之和为:
q
(
n
+
1
)
/
(
q
−
1
)
q ^{(n + 1 )} /(q − 1 )
q(n+1)/(q−1)
其中q为公比。
但是直接用这个公式写完会挂掉几个点
原因就是没有打逆元
因为x/y再mod 可能会出现负数 所以要逆元求解
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long n,p=1000000007,y=1;
long long s=5e8+4;
void ksm(long long x)//快速幂模板
{
long long t=3;
while(x)
{
if(x&1)//取1
{
y=(y*t)%p;
}
t=(t*t)%p;
x>>=1;
}
}
int main()
{
cin>>n;
ksm(n+1);
long long ans=(y-1)*s%p;//%p就相当于打逆元
cout<<ans;
return 0;
}