package Sort
import (
"fmt"
"testing"
)
func Pow0(a, b int) int { //常规求幂
r := 1
for b > 0 {
r, b = r*a, b-1
}
return r
}
func Pow1(a, b int) int { //快速求幂 一般
r, base := 1, a
for b != 0 {
if b%2 == 1 {
r *= base
}
base,b=base * base,b/2
}
return r
}
func Pow2(m, n int) int { //快速求幂 递归
if n == 1 {
return m
}
tmp := Pow2(m, n/2)
return map[bool]int{n%2 == 0: 1, n%2 != 0: m}[true]* tmp * tmp
}
func Pow3(x, n int) int { //快速求幂 位运算
if n == 0 {
return 1
} else {
for (n & 1) == 0 {
n ,x = n>>1,x*x
}
}
result := x
n >>= 1
for n != 0 {
x *= x
if n&1 == 1 {
result *= x
}
n >>= 1
}
return result
}
func TestQuickPow(t *testing.T) {
a, b := 2, 59
fmt.Println(Pow0(a, b))
fmt.Println(Pow1(a, b))
fmt.Println(Pow2(a, b))
fmt.Println(Pow3(a, b))
}
实现快速幂
于 2021-02-23 22:59:31 首次发布