51Nod1013乘法逆元与快速逆运算

求:(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

发布了73 篇原创文章 · 获赞 27 · 访问量 1256

猜你喜欢

转载自blog.csdn.net/queque_heiya/article/details/103772064