ProjectEuler21で解く
problem21
d(n) を n の真の約数の和と定義する. (真の約数とは n 以外の約数のことである. )
もし, d(a) = b かつ d(b) = a (a ≠ b のとき) を満たすとき, a と b は友愛数(親和数)であるという.
例えば, 220 の約数は 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 なので d(220) = 284 である.
また, 284 の約数は 1, 2, 4, 71, 142 なので d(284) = 220 である.
それでは10000未満の友愛数の和を求めよ.
・・・「友愛」ってフレーズがなんだか懐かしいですね。
失敗1
これを走らせると結果は40284となり、不正解でした。
問題文を読み返して気づいたのが、「10000未満の」友愛数であるということ。もしかしてsum1かsum2が10000以上になったのが原因かしらん?条件に加えてみよう。
失敗2
またしても合計は40284となり、不正解。・・・なぜだぁ。
・・・これって友愛数が自分自身ってパターンはないのかな?調べてみよう。
このコードでチェックしたところ、6,28,496,8128が該当することがわかった。これが間違いの原因だったのか!
というわけで解答
解答
で答え31626をようやく得ることができました。