关于n非常大的时候x^n次方的程序实现
1 代码:2 测试代码:3 测试结果:4 注意事项5 参考文献
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.csdn.net/qq_41755258/article/details/83240978 【2】https://blog.csdn.net/frank_liuxing/article/details/54022402 【3】http://poj.org/problem?id=3734 【4】https://blog.csdn.net/consciousman/article/details/77935700