我正在尝试编写一个程序来计算布朗数,或者可以表示为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!
发布于 2016-11-10 05:32:14
您的循环永远不会结束,因为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
https://stackoverflow.com/questions/40516329
复制相似问题