【发布时间】:2016-08-23 16:44:56
【问题描述】:
我试图找出任何非平方数的连分数(直到它重复)。
例如:输入:23 = [4; 1,3,1,8]
我的代码适用于许多数字(即使它非常笨拙)。 它适用于 23 个输出位置:
[4, 1, 3, 1, 8, 1, 3, 1]
(忽略多余的1、3、1)
但是当我输入 61 时它永远不会停止...这里有一行输出:
[7, 1, 4, 3, 1, 2, 2, 1, 3, 4, 1, 14, 1, 4, 3, 1, 2, 2, 1, 4, 5, 1, 6900]
14 之后它不会像应有的那样重复(4、5 而不是 3、4 和 6900 不合适)
在编码方面我有点菜鸟,所以如果有人能告诉我为什么它不起作用以及我应该如何解决它,那将很有帮助
这是我的代码:
def find_fractions(n):
d = math.sqrt(n)
x = 0
y = 0
safeint = 0
safe = True
a = ["a", "b", "c", "d"]
while a[1:int(len(a) / 2)] != a[int(len(a) / 2) + 1:]:
a.append(math.floor(d))
d = 1 / (d - math.floor(d))
print(a)
safeint += 1
if safeint > 4 and safe:
del a[0]
del a[0]
del a[0]
del a[0]
safe = False
print(a)
find_fractions(23)
编辑:不是 63,是 61
【问题讨论】:
-
您能否提供您想要达到的目标的一般数学描述?
-
63对我来说很好,导致[7, 1, 14, 1, 14, 1, 14, 1]。对于 64,它给出ZeroDivisionError -
基本上我在关注这个:math.stackexchange.com/questions/265690/… 并试图找到任何非平方数的连分数
-
@vsminkov 它适用于任何重复序列不那么长的数字(如果有意义的话),但不适用于 fx、61 或 109。另外 64 不起作用的原因是因为它是一个完美的正方形
标签: python python-3.x math output