51Nod - 1013 3的冪的和


求:3^0 + 3^1 +...+ 3^(N) mod 1000000007

Input

輸入一個數N(0 <= N <= 10^9)

Output

輸出:計算結果

Sample Input

3

Sample Output

40
題解:
等比數列前(n+1)項和,公比為3首項為1所以t=( 3^(n+1)-1 ) / 2 % 1000000007。
3^(n+1)用快速冪解決,而除法取模只需將除法變乘法即可,也就是用被除數去乘以除數的乘法逆元。
求乘法逆元用費馬小定理:當模為素數,a的逆元為myPow(a,mod-2)。

代碼:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;
#define mod 1000000007

long long myPow(long long t,long long N){

	long long mid = 1;

	while(N){
		if(N&1){
			mid *= t;
			mid %= mod;
		}
		t *= t;
		t %= mod;
		N >>= 1;
	}

	return mid;
}

int main(){

	long long N;
	cin>>N;
	
	long long t = myPow(3,N+1)-1;
	t = (t*myPow(2,mod-2))%mod;
	
	cout<<t<<endl;

	return 0;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: