题目链接:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1013
求:3^0 + 3^1 +...+ 3^(N) mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Input示例
3
Output示例
40
分析:快速幂+逆元
一开始并不知道要逆元,wa了好多数据。。。
后来通过看别人AC代码才知道。
学习:http://blog.csdn.net/h1021456873/article/details/49401637
<span style="font-size:24px;">#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"algorithm"
#include"string"
const int mod=1000000007;
const int _2=mod/2+1;//2对mod的逆元
int q=3;
int n;
int pow(int n)
{
if(n==0) return 1;
int m=n/2;
long long ans=pow(m)%mod;
ans=ans*ans%mod;
if(n%2==1) ans=ans*q%mod;
return ans;
}
int main()
{
scanf("%d",&n);
long long ans=pow(n);
ans=q*(ans-1)*_2%mod;
printf("%lld\n",ans+1);//3^0
return 0;
}</span>