【发布时间】:2018-06-03 04:36:31
【问题描述】:
我正在尝试检查一个大数是否是一个完美的正方形。这是我的代码的相应部分:
x = long(raw_input())
a = sqrt(5 * x ** 2 + 4)
b = sqrt(5 * x **2 - 4)
if long(a) == a or long(b) == b:
print "YES"
else:
print "NO"
但是,当 x 变得太大时,我会收到此错误:
a = sqrt(5 * x ** 2 + 4)
OverflowError: long int too large to convert to float
谁能告诉我解决方法?
【问题讨论】:
-
你可以试试Newton's method。
-
有更好的方法来确定一个数字是否是一个完美的正方形(例如,参见this)。
-
@erip 你的意思是 python 不能做到这一点?
-
您使用了错误的算法。尝试找到不依赖于大数字的东西。
-
@xrisk 如果您查看了链接,它是用 Python 实现的。无论如何,我认为 arshajii 的解决方案更聪明。
标签: python python-2.7