このアルゴリズムに問題があります。特定の範囲の数値の最小公倍数を見つけようとしています。次の関数は、数値の因数を見つけ、数値のさまざまな因数を数え、因数を数えて、このアルゴリズムに基づいて数値の範囲の lcm を見つけ、最後に lcm を計算します。ただし、このコードを実行すると、一番下の print ステートメントは正しい答えを出力しません。代わりに、確かに正しくないことがわかっている番号を取得します。このコードの問題点を指摘するには、主に 2 番目の目が必要です。誰でも助けることができますか?
from collections import defaultdict
def factors_of(number):
factors = [];
i = 2
while number >= 2:
if number % i == 0:
factors.append(i)
number = number / i
else:
i += 1
return factors
def count_factors(number):
count = {}
factors = factors_of(number)
for factor in factors:
if not factor in count:
count[factor] = 1
else:
count[factor] += 1
return count
def count_factors_of_numbers_in_range(start, stop):
count = defaultdict(int)
for number in range(start, stop):
factor_count = count_factors(number)
for key in factor_count:
if count[key] < factor_count[key]:
count[key] = factor_count[key]
return dict(count)
def find_lcm_of_numbers_in_range(start, stop):
count = count_factors_of_numbers_in_range(start, stop)
lcm = 1
for key in count:
total = count[key] * key
lcm = total * lcm
return lcm
print find_lcm_of_numbers_in_range(1, 21)