package com.study.经典算法题;
public class 快速幂 {
public static void main(String[] args) {
System.out.println(fastPower1(2, 2));
System.out.println(fastPower2(2,2));
}
//遍历n次得到a^n,时间复杂度为O(n)
//快速幂(O(logn)),n很大的时候,不会爆栈
//递归版本
public static long fastPower1(long a, int n) {
//递归出口
if (n == 1)
return a;
long tmp = fastPower1(a, n / 2);
if (n % 2 == 1)
return tmp * tmp * a;
else
return tmp * tmp;
}
//非递归版本,位运算
public static long fastPower2(long a, int n) {
long ans = 1;
while (n != 0) {
if ((n & 1) != 0)
ans *= a;
a *= a;
n >>= 1;
}
return ans;
}
}
快速幂(Java实现)
最新推荐文章于 2024-04-12 20:10:00 发布