1 代码:
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int mod = 1000000007;
long long e_pow(ll a, ll n) {
int i;
ll sum;
sum = 1;
while (n) {
if (1 & n) sum = sum * a%mod;
a = a * a%mod;
n >>= 1;//
}
return sum;
}
int main()
{
ll n;
cin >> n;
long long sum1 = e_pow(2, n - 1);
long long sum2=e_pow(4, n - 1);
cout <<( sum1+sum2) % mod<<endl;
return 0;
}
2 测试代码:
int main()
{
cin >> n;
e_pow(2,n-1);
cout << sum%mod;
return 0;
3 测试结果:
4 注意事项
long long进入了c++11标准,同样定义为位数不低于64位;
虽然最终答案在 32 位整型范围内,但是计算乘法的时候需要用 64 位整型才不会溢出
5 参考文献
【1】https://blog.youkuaiyun.com/qq_41755258/article/details/83240978
【2】https://blog.youkuaiyun.com/frank_liuxing/article/details/54022402
【3】http://poj.org/problem?id=3734
【4】https://blog.youkuaiyun.com/consciousman/article/details/77935700