私はプロジェクトオイラーの問題23に苦しんでいます:豊富でない合計。
豊富な数を計算するスクリプトがあります。
function getSummOfDivisors( $number )
{
$divisors = array ();
for( $i = 1; $i < $number; $i ++ ) {
if ( $number % $i == 0 ) {
$divisors[] = $i;
}
}
return array_sum( $divisors );
}
$limit = 28123;
//$limit = 1000;
$matches = array();
$k = 0;
while( $k <= ( $limit/2 ) ) {
if ( $k < getSummOfDivisors( $k ) ) {
$matches[] = $k;
}
$k++;
}
echo '<pre>'; print_r( $matches );
私はすでにインターネットで入手可能なものでそれらの番号をチェックしました、そしてそれらは正しいです。それらに2を掛けて、2つの過剰数の合計である数を得ることができます。
しかし、そのように書くことができないすべての数字を見つける必要があるので、私は次のif
ようにステートメントを逆にします:
if ( $k >= getSummOfDivisors( $k ) )
これで、すべてを格納する必要があります。これは、豊富な数の合計として作成することはできませんが、ここで何かが終了するわけではありません。それらを合計すると、正しい答えにさえ近くない数が得られます。
私は答えを見たくありませんが、私が間違っていること(または私が見逃していることや誤解していること)に関するいくつかのガイドライン/ヒントが必要です。
編集:私も逆の順序で試しました。つまり、上から始めて2で割り、それらが豊富かどうかを確認しました。それでも間違って出てきます。