#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
#define LL long long
#define MAX(a,b) (a)>(b)?(a):(b)
#define MIN(a,b) (a)<(b)?(a):(b)
using namespace std;
//快速幂非递归版
LL quick( LL a, LL pow )
{
LL ans = 1;
while ( pow > 0 )
{
if( pow&1 ) ans = ans * a;
a = a * a;
pow >>= 1;
}
return ans;
}
//快速幂递归版
LL Quick( LL a, LL b)
{
if( b == 1 ) return a;
LL ans = Quick(a, b>>1);
if( b&1 ) return ans * ans * a;
else return ans * ans;
}
LL quickmod( LL a, LL b, int mod)
{
int ans = 1;
while ( b > 0 )
{
if( b&1 ) ans = ( (ans%mod) * (a%mod) ) % mod;
a = ( (a%mod) * (a%mod) ) % mod;
b >>= 1;
}
return ans;
}
int main()
{
LL a, b;
a = 3; b = 344;
printf("%lld\n", quick(a, b));
printf("%lld\n", Quick(a,b));
printf("%d\n", quickmod(a,b,10));
return 0;
}
快速幂的递归和非递归实现
最新推荐文章于 2023-04-05 10:32:58 发布