【发布时间】:2017-05-19 06:26:44
【问题描述】:
我在 Python 中创建了一个程序来寻找 Fermat 大定理的解决方案(我知道这无法解决,但我只是将它用作编程练习)。费马大定理指出:
对于任何大于 2 的 n 整数值,没有三个正整数 a、b 和 c 满足方程 a^n + b^n = c^n。
来源:Wikipedia
我的算法(在 Python 中)在这里:
from fractions import Fraction
def root(num):
return num ** Fraction(1 / power)
def two_numbers():
a = b = 1
while True:
yield a, b
if a == b:
a += 1
b = 1
else:
b += 1
def test(a, b):
return root((a ** power) + (b ** power)) % 1 == 0
power = int(input('Power: '))
generator = two_numbers()
for a, b in generator:
result = test(a, b)
print(a, b, result)
if result:
break
当使用 12 的幂(在提示符处输入 12)运行时,它会停在:
17 1 True
这可能是由于小数索引不准确。
我怎么知道它是否被四舍五入,或者以其他方式解决这个问题?
【问题讨论】:
-
必须使用浮点数
-
Fraction不能这样工作:检查Fraction(1 / 12)与Fraction(1, 12)。在指数中使用Fraction是没用的,它无论如何都会转换为浮点数。
标签: python algorithm python-3.x math