快速幂算法——可迅速求出a^b。其主要理论依据如下:
1,当b为偶数时,a^b可以转为a^2的b/2次方。
2,当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。
而a^2的b/2次方,以可以使用上述方式转为a^4的b/4次方再乘以某个数
#include<bits/stdc++.h>
using namespace std;
int powmod(int x){
if(x==1)return 1;
else{
int ans=1;
int k=x%10;
while(x>0){
if(x%2==1)ans=ans*k%10; //判断是否为奇数
x/=2;
k=k*k%10;
}
return ans;
}
}
int main()
{
int N;
while(~scanf("%d",&N))
printf("%d\n",powmod(N));
return 0;
}
可联系矩阵快速幂:
typedef vector<vec>mat;
mat solve_pow(mat a,ll n) //快速幂
{
mat b(a.size(),vec(a.size()));
for(ll i=0;i<a.size();i++)
{
b[i][i]=1;
}
while(n>0)
{
if(n&1)
b=mul(b,a);
a=mul(a,a);
n>>=1;
}
return b;
}