• ベストアンサー

PHP 素数

自分がPHPを覚えたいということで知り合いから 課題を出されました。その課題が PHPで100までの素数を出すということなのですが、 どうしても分かりません。まったくはじめの段階でいきずまって、なんども書いては消しての繰り返しになっております。 どなたかご存知の方が今したらお伺いできますでしょうか。 <?php $max = 500; $arr = range( 2, $max ); $end = sqrt( $max ); for ( $i = 2; $i < $end; ++$i ) {

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.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 . " "; } ?>

noname#130289
質問者

お礼

ご丁寧に教えてくださりありがとうございます。 さっそく勉強をさせて頂きます。 どうもありがとうございました!!

その他の回答 (2)

noname#26650
noname#26650
回答No.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)
回答No.1

<?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." "; } } ?>

noname#130289
質問者

お礼

さっそくのご返答ありがとうございます。 さっそく勉強をさせて頂きます。 ただまだ初心者のため解読できるのに知らない書き方が多いので時間がかかってしまいそうです。もし他に簡単?ともうしますか、書き方があり、ご存知でしたらお伺いできますか。 申し訳ございません。でもありがとうございました。

関連するQ&A