- ベストアンサー
PHP 素数
自分がPHPを覚えたいということで知り合いから 課題を出されました。その課題が PHPで100までの素数を出すということなのですが、 どうしても分かりません。まったくはじめの段階でいきずまって、なんども書いては消しての繰り返しになっております。 どなたかご存知の方が今したらお伺いできますでしょうか。 <?php $max = 500; $arr = range( 2, $max ); $end = sqrt( $max ); for ( $i = 2; $i < $end; ++$i ) {
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
じゃあ私は「エラトステネスのふるい」で <?php $max_num = 100; // 100までの素数を求める $array = range(0, $max_num); // 0-100までの配列を準備する // 素数でないものは配列の値を0にする // $array[0]はもともと0なので$array[1]だけ0にセット $array[1] = 0; // 平方根の値までを調べればよい $limit_num = (int)sqrt($max_num); // 素数の倍数は素数ではないので0にする // 2から$limit_numまでループ for ($search = 2; $search <= $limit_num; $search++) { if ($array[$search]) { // 0でないということは素数 // 素数の2倍以上の倍数を0に for ($delete = $search * 2; $delete <= $max_num; $delete += $search) { $array[$delete] = 0; } } } foreach ($array as $val) { // 値が0でないものは素数なので表示 if ($val) echo $val . " "; } ?>
その他の回答 (2)
サンプルです。 <?php echo "2"." "; for ($i = 3; $i <= 100; $i += 2) { for ($j = 2; $j * $j <= $i; $j++) { if ($i % $j == 0) { break; } } if ($j * $j > $i) { echo $i." "; } } ?> (注)インデントのため、全角空白を使っています。
- maura
- ベストアンサー率46% (48/104)
<?php function checkifprime($prime){ for($i = 2; $i < sqrt($prime); $i = $i + 2){ if ($prime % $i == 0){ return false; } } return true; } echo "2"." "; for($i = 3; $i <= 100; $i = $i +2){ if(checkifprime($i)){ echo $i." "; } } ?>
お礼
さっそくのご返答ありがとうございます。 さっそく勉強をさせて頂きます。 ただまだ初心者のため解読できるのに知らない書き方が多いので時間がかかってしまいそうです。もし他に簡単?ともうしますか、書き方があり、ご存知でしたらお伺いできますか。 申し訳ございません。でもありがとうございました。
お礼
ご丁寧に教えてくださりありがとうございます。 さっそく勉強をさせて頂きます。 どうもありがとうございました!!