0

問題は次のとおりです。次の式で、x、y、および n は正の整数です。

1/x + 1/y = 1/n

極限 L に対して、F(L) を x < y ≤ L を満たす解の数として定義します。

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)

しかし、リストには何も保存されていません。

4

2 に答える 2

1

ループx内で変更しています。はループyx += 1前に属します。y効果的に使用することで、インクリメントを完全になくすことができますrange()range(1,limit+1)1から始まります。

あなたはまた、正しく比較ylimitていません。y <= 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)
于 2014-01-14T06:03:19.560 に答える
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 でどのように役立つかはまだわかりません。

于 2014-01-14T22:38:04.283 に答える