求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Sample Input
3
Sample Output
40
一项一项处理会超时,故可用等比数列公式转化成除法,再找逆元逆元,
s = a1(1-q^n)/(1-q)
//转化为等比数列前n项和,有公式转化为除法,再求2的逆元
#include<stdio.h>
typedef long long ll;
#define mod 1000000007
ll powmod(ll a,ll n)
{
ll sum = 1;
a %= mod;
while (n)
{
if (n%2)
sum = (sum * a) % mod;
n /= 2;
a = (a * a) % mod;
}
return sum;
}
int main()
{
ll n,x,y,sum = 0;
scanf("%lld",&n);
x = powmod(3,n+1);
y = powmod(2,mod-2);
sum = (x-1)*y%mod;
//sum = (mod+x-1)*y%mod;
printf("%lld\n",sum);
return 0;
}