コード:
total = 0
for number in xrange(10000):
divisors = 0
divisors2 = 0
for dividend in xrange(1, number/2):
if number % dividend == 0:
divisors = divisors + dividend
for dividend2 in xrange(1, divisors/2):
if divisors % dividend2 == 0:
divisors2 = divisors2 + dividend2
if number == divisors2:
total = total + number + divisors
print total
このコードは、10,000未満の友愛数(つまり、それ自体よりも小さい除数の総数が元の数に等しい別の数に等しい数、Project Euler、問題21を参照)を生成し、それらを見つけたときにそれらを追加することになっています。48を生成していますが、これは低すぎます。
プログラムは予想よりもはるかに速く実行されました。私は多くの数値を実行していますが、これは適切な除数を取得するための非常に高速な方法ではないことを知っているので、何かが起きているのではないかと思いました。ループ。Pythonが予期せず停止していたか、ループが順不同で実行されていました。次のループの開始前に除数を印刷するコマンドを入力すると、それは永久に続き、同じ数の長い行を印刷する傾向があります。ここでは間違いなく奇妙なことが起こっています。私は「奇妙なループの振る舞い」をグーグルで検索し、ここで検索しましたが、役に立ちませんでした。[こちら]もチェックしました。2
何が起こっているのですか、それについてどうすればよいですか?
前もって感謝します。