目录
什么是快速幂?
例如我们要计算2^1e10的后6位
普通算法
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int n=1;
long long int k=1e10;
while(k>0)
{
n=(n*2)%(int)1e6;
k--;
}
cout<<n<<endl;
return 0;
}
普通代码用时37.3s,效率very very 低,
快速幂算法
#include<bits/stdc++.h>
using namespace std;
#define ll long long//懒
const ll maxn=1e6;
long long sp(long long n, long long k) {
long long ans = 1;
while (k > 0) {
if (k % 2 == 1) {
ans = ans * n % 1000000;
}
k = k / 2;
n = (n * n) % 1000000;
}
return ans;
}
int main()
{
ll int n=2;
ll int k=1e10;//指数
cout<<sp(2,1000000000);
return 0;
}
理解:
比如2^100普通要算100次,我们只要变成4^50,就可以减少49次运算,这便是快速幂了.
用时0.06s,相比于普通算法足足相差了600倍!!!
就好比你准备蓝桥杯准备了600天,和别准备了1天的效果一样,都没拿奖;
什么是高精度?
高精度加法
例如我们要计算斐波那契的第100项(大约为