def exponentiation(base,n):
if n == 0:
return 1
if n % 2 == 0:
return exponentiation(base*base, n/2)
else:
return base * exponentiation(base * base, (n-1)/2)
if __name__ == '__main__':
print(len(str(exponentiation(2, 66666666))))对于非常大的整数,计算机在寻找数字乘积时会变得非常缓慢;我知道1G内存可以存储至少2^8000000000位数字,但是这个程序在达到这个限制之前就已经慢下来了。
为了提高程序进行乘法的速度,我希望用平方方法进行幂运算,但似乎程序存储如此大的整数存在问题。
发布于 2022-11-20 21:36:06
只需使用内置的**操作符即可。它的工作速度快得多。
big_number_a = 2 ** 66666666
big_number_b = exponentiation(2, 66666666)
big_number_a == big_number_b # True另外,不要尝试使用str将这么大的数字转换为十进制字符串,除非您真的必须这样做。这部分是超级慢。
发布于 2022-11-20 21:32:32
是的,有一个更快的方法:
exponentiation = pow这大约是你的方法的两倍,它也适用于非整数。
但是,代码中的指数时间是可以忽略不计的。其大部分时间用于将整数转换为字符串。如果您想要整数所拥有的位数,请改用int(math.log10(n)) + 1。
https://stackoverflow.com/questions/74512116
复制相似问题