项目欧拉454 diophantine倒数

时间:2014-01-14 02:46:07

标签: python diophantine

问题是: 在下面的等式中,x,y和n是正整数。

1 / x + 1 / y = 1 / n

对于极限L,我们将F(L)定义为满足x

我们可以验证F(15)= 4和F(1000)= 1069。 找到F(1012)。

我决定测试我是否能找到F(15)

count = 0
limit = 15
storage = []
x = 1
y = 1

for x in range(limit + 1):
    for y in range(limit + 1):
        x += 1
        y += 1
        n = x*y/(x+y)
        condition = x*y%(x+y)

        if (condition == 0 and x<y and y<limit):
            count += 1
            storage.append(x)
            storage.append(y)
            storage.append(n)

print (storage)
print (count)

但是没有任何内容存储在列表中。

2 个答案:

答案 0 :(得分:1)

您正在修改x循环中的yx += 1属于y循环之前。 您可以有效地使用range()来完全消除增量。 range(1,limit+1)将从1开始。

您也没有正确比较ylimity <= limit

程序的略微修改版本:

count = 0
limit = 15
storage = []
x = 1
y = 1

for x in range(1,limit + 1):
    for y in range(1,limit + 1):
        n = x*y/(x+y)
        condition = x*y%(x+y)

        if (condition == 0 and x<y and y<=limit):
            count += 1
            storage.append(x)
            storage.append(y)
            storage.append(n)

print (storage)
print (count)

答案 1 :(得分:0)

即使试图在10 ^ 5时计算出这个数字,你也会有一次蛮力的方法。我一直试图想出这个。

以下是我所知道的:

1 / x + 1 / y = 1 / n可以改写为

1 /(n + a)+ 1 /(n + b)= 1 / n 这可以减少到ab = n ^ 2

(这是我用来解决问题108和110的方法) 通过得到n ^ 2的所有除数,你可以求解'a'和'b',但只有当n是一个固定的整数时,这才有用。

我还没弄明白这对454有什么帮助。