私はPHPでProject Eulerを解決しようとしていますが、whileループ内のforループ条件で問題が発生しています。誰かが私を正しい方向に向けることができますか?私は正しい道にここにいますか?プロジェクトオイラー||質問10
問題は、ところで、2,000,000
その他の注意事項以下のすべての素数の合計を見つけることです:私は遭遇しています問題は、メモリ豚のようだということで、ふるいを実装するほかに、私は」他にどのようにこれにアプローチするか分からない。だから、私は実装で何か間違っていたのだろうかと思います。
<?php
// The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
// Additional information:
// Sum below 100: 1060
// 1000: 76127
// (for testing)
// Find the sum of all the primes below 2,000,000.
// First, let's set n = 2 mill or the number we wish to find
// the primes under.
$n = 2000000;
// Then, let's set p = 2, the first prime number.
$p = 2;
// Now, let's create a list of all numbers from p to n.
$list = range($p, $n);
// Now the loop for Sieve of Eratosthenes.
// Also, let $i = 0 for a counter.
$i = 0;
while($p*$p < $n)
{
// Strike off all multiples of p less than or equal to n
for($k=0; $k < $n; $k++)
{
if($list[$k] % $p == 0)
{
unset($list[$k]);
}
}
// Re-initialize array
sort ($list);
// Find first number on list after p. Let that equal p.
$i = $i + 1;
$p = $list[$i];
}
echo array_sum($list);
?>
[問題10](http://projecteuler.net/index.php?section=problems&id=10):) – Matchu
これは一般的にコードがうまくいかないことを説明するのに役立ちます。あなたは何をしたいのですか?私は自分の箱でそれを実行し、35行目ではPHPモジュラス演算子 '%'の代わりに 'mod'を使用していることに気付きました。その後、PHPはメモリ制限を超えました。 – Matchu
開発中にエラーをキャッチするために 'error_reporting(-1);'または同様のセットがあるべきです。 –