求:(3^0 + 3^1 +...+ 3^(N) )mod 1000000007
Input
输入一个数N(0 <= N <= 10^9)
Output
输出:计算结果
Sample Input
3
Sample Output
40
超时代码:
#include<iostream>
using namespace std;
//MOD=1000000007;
//pow(x,n)%mod
typedef long long ll;
ll mod_pow(ll x,ll n,ll mod){//时间复杂度O(logn)
ll ans=1;
while(n>0){
if(n&1)
ans=ans*x%mod;
x=x*x%mod;
n>>=1;
}
return ans;
}
int main(){
int n,ans=0;
cin>>n;
for(int i=0;i<=n;i++){
ans+=mod_pow(3,i,1000000007);
ans=ans%1000000007;
}
cout<<ans<<endl;
}
/*Sample Input
3
Sample Output
40*/
AC代码
#include <iostream>
using namespace std;
typedef long long ll;
ll MOD = 1000000007;
ll mod_pow(ll n){
ll k=3,ans=1;
while(n){
if(n&1)
ans=(ans*k)%MOD;
n/=2;
k=(k*k)%MOD;
}
return ans;
}
int main(){
ll n;
while (cin>>n){
ll ans=((mod_pow(n+1)-1)*500000004)%MOD;
cout<<ans<<endl;
}
}
可以参考的博客链接:https://blog.csdn.net/JinbaoSite/article/details/72676514