Requirements: (3 ^ 0 + 3 ^ 1 + ... + 3 ^ (N)) mod 1000000007
Input
Enter a number N (0 <= N <= 10 ^ 9)
Output
Output: the results
Sample Input
3
Sample Output
40
Timeout Code:
#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 Code
#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;
}
}
Can refer to the blog links: https://blog.csdn.net/JinbaoSite/article/details/72676514