O
(
l
o
g
n
)
O(logn)
O(logn)时间复杂度的情况下计算
t
!
t !
t! 和
a
t
a ^ t
at。
快速幂计算在笔试中写过好多次了,万万没想到阶乘也可以。
import sys
def power(n, m):
global number, cn, p_size, mask
if (m == 1):
cur = n
elif(m & 1 != 0):
cur = n * power(n, m - 1)
else:
cur = power(n, m >> 1)
cur *= cur
cn[number] = (cur >> ((m >> 1) * p_size)) & mask
number += 1
return cur
def factor(n):
global number, cn, p_size, mask
if (n == 1):
return 1
elif(n & 1 == 1):
return n * factor(n - 1)
else:
cur = factor(n >> 1)
pos = number
number += 1
return cn[pos] * cur * cur
def factorial(n):
global number, cn, p_size, mask
x = (1 << n) + 1
number = 0
mask = (1 << n) - 1
p_size = n
power(x, n)
number = 0
return factor(n)
p_size = 0
mask = 0
cn = []
number = 0
N = int(sys.stdin.readline().strip())
for ppp in range(N):
line = sys.stdin.readline().strip()
a,t = list(map(int, line.split()))
cn = [0 for i in range(t+1)]
p = power(a, t)
number = 0
q = factorial(t)
print(max(p, q))