我试图制作一个计算布朗数字的程序,或者可以表示为n!+1 = m^2
的数字,其中m是一个整数,并且运行此数字会产生太大的数字。
知道怎么解决这个问题吗? (还有一种abacist风格的方法,但它需要指数更长)
n = 40320
f = 9
while True:
x = (n+1)**(.5)
if isinstance( x, int ):
break
else:
n = n*f
f = f+1
print(f)
print(n)
print(input(" "))
* n是8!
答案 0 :(得分:0)
您的循环永远不会结束,因为x
永远不会是int
类型的
>>> 4**0.5
2.0
>>> isinstance(4**0.5, int)
False
>>> isinstance(4**0.5, float)
True
我可以建议这个替代方案:
x = (n+1)**(.5)
x = int(round(x))
if x ** 2 == n + 1:
break
这也应该处理浮点精度问题。
编辑:以上是一个简单的小数字方法。要检查大数是否是完美的正方形,还有其他方法,例如:https://stackoverflow.com/a/2489519/2482744