• ベストアンサー

php で1から100までの素数の表示の仕方を教えてください

剰余演算子%を使ってforeach for() if()を組み合わせて1から100までの素数の表示の仕方を教えてください、お願いします。 ちなみに100以下のすべての素数を求めるプログラムで、素数は、1とその数以外に約数を持たない数のことです。たとえば、1を除くと2,3,5,7,11・・・となります。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
回答No.1

<?php //PHP 6.0.0 200801101530 //エラトステネスの篩はPHPでどうやるのか調べるのが面倒なので //素直に行きます。 $array = array(); array_push($array,2); for($i = 3;$i <= 100;$i++){ $k = true; for($j = 2;$j < $i;$j++){ if ($i % $j == 0){ $k = false; } } if ($k == true){ array_push($array,$i); } } //foreach for() if()を組み合わせて・・・・って指定があるのでこっそり使用。 foreach($array as $val){ print($val . "\n"); } ?>

sano006
質問者

お礼

ソースを書いてくれてすごく助かりました。本当にありがとうございます。

その他の回答 (2)

回答No.3

こんな感じ?数字でかくしすぎると処理長いですw <?php //1から100までの素数を取得 $prime = array(); for ($i = 1; $i <= 100; $i++) { if (isPrimeNumber($i)) { array_push($prime, $i); } } //取得した素数の出力 foreach ($prime as $value) { echo $value . "&nbsp;"; } function isPrimeNumber($target) { //マイナス値を無視 $target = abs($target); //1以下は素数でない if ($target < 2) { return false; } //対象数値の平方根までの整数で //割り切れる数値は素数でない $max = floor(sqrt($target)); for ($i = 2; $i <= $max; $i++) { if ($target % $i == 0) { return false; } } return true; }

sano006
質問者

お礼

ありがとうございます。これでなんとかなりそうです。本当にありがとうございました。

noname#58606
noname#58606
回答No.2

http://okwave.jp/qa2797000.html 素数の求め方は、私も、暇だった頃に、作ったことがあります。 私は関数の再帰を利用したような。 自分で考えてみることが出来る、適度な難しさだと思いますよ。 考え方としては、エラトステネスのふるいが有名です。 素数リストに加えられた数の全ての倍数を、探索リストから削除する方法です。 ただし、この方法だと配列が膨れるという欠点があります。 コンピュータは同じ作業を素早く出来るから、目標の数を目標の数の半分の数まで割り続けるのも、手ですよ。 97は素数ですが、1から48まで割れなかったら、素数です。 49以上だと、2で割れなくなるので(つまり割れたとしても小数点になるので)、素数ではなくなるという訳です。 この方法だと、メモリーは少なくなりますが、恐ろしく時間がかかります。w

sano006
質問者

お礼

ありがとうございます、参考になりました。試してみます

関連するQ&A

  • 大きな数の剰余

    現在、暗号に関するプログラムを作っていて、大きな数の剰余を するところで悩んでます。 ここでいう大きな数は2乗や3乗やその他の手続きを経てintやunsigned intで扱える数値を超えているものです。 演算子%も扱える数値が決まっているようでうまくいかないです。 型をdoubleにして割る数をひたすら引いていけば答えは出ますが 効率がいいとはいえません。 型、アルゴリズムという観点で大きな数の剰余はどのようにすれば できるのか教えてください。よろしくお願いします。

  • PHPで素数を表現に関するご質問

    PHPで素数を表現する際に関しての質問です。 ■知りたい点 下記のコードで、iが3の時、 for($j =3; $j < $i; $j++){ の $j < $i の動作の仕方がわかりません。 3 < 3 だから、条件に反する。よって処理なし? とか考えてしまっています。 どのような、解法をしているのでしょうか。 お手数をお掛けしますが、よろしくお願い致します。 P.S すみません。質問があいまいで答えずらいかと思います。。。 <?php //関数の呼び出し sosuu_check(); //素数を表示する関数 function sosuu_check() { //1~100までを繰り返す for($i=1;$i<=100;$i++) { //1以下の場合は次の値をチェックする if($i < 2) { continue; } //2の場合は素数なので表示して、次の値をチェックする。 if($i == 2) { print $i . ":"; continue; } //偶数の場合は素数ではないので、次の値をチェックする。 if($i % 2 == 0) { continue; } $flg = "0";//割り切れたか判定するフラグ変数 //今の値は1と今の値以外では割れてはいけない。 for($j = 3;$j < $i; $j++){ //割れてしまったら素数ではないので次の値をチェックする。 if($i % $j == 0){$flg = "1";break;} } //割れなかった場合は素数なので表示する。 if($flg == "0") { print $i . ":"; } } } ?>

    • ベストアンサー
    • PHP
  • 2進数表示

    以前にもお聞きしたんですが、 while (atai != 0) { amari = atai % 2; atai = atai / 2; /*表示*/ } と2進数の表示プログラムを作ったんですが、 シフト演算で表示するにはどうしたらよいか教えてください。

  • 確認したいのでやってみてください

    0から50までの素数を列挙するプログラムを作成せよ。 素数→0,1を除く、2つしか約数がない数 if switch for while do-while 配列 をなるべく使う。 <実行結果> 0~50までの素数は以下となります 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

  • C言語

    次のプログラムは、自然数を入力して,その約数を表示するものである。ブログラム中の0 ~に適するものを答えなさい。ただし,a%bはaをbで割ったときの会りを求める演算 である。 参考 約数とは、入カした自然数に対して,その数を割り切ることのできる整数である。 例えば、6の約数は、1, 2, 3,6となる。 #include <stdio.h> int main (void) int i, num; printf("自然数を入カしてください。"): scanf ("%d", &num); printf("%dの約数は", num) ; for (i =@;i <= num; i++) ( if (num % i @ 0) { printf ("%d,i@1): printf("です。 ¥n"): return 0; 9 この問題の@の部分に入る数字、記号を教えて欲しいのとなぜそうなるのかも教えていただきたいです(-。-;

  • 2から120以下の素数を求める

    2以上120以下の素数を全て求めて表示するプログラムを書きなさい。 素数か否かの判定には以下のアルゴリズム[処理手順] (2 <= n <= 120のときのみ有効)を用いなさい。 i) nが2, 3, 5, 7, 11のうちのどれかと等しければNは素数 ii) nが2, 3, 5, 7, 11の全てに対して割切れなければNは素数 iii) それ以外(iもiiも不成立)のとき、Nは素数ではない。 *) 2, 3, 5, 7, 11は最初に出力してしまい、 n=12から120までをfor文のなかで判定すればよい。 というC言語の課題です。 自分でプログラムを作ったのですが、うまくできません・・。 if文が働いてないようなのですが、どこが間違っているのでしょうか? #include <stdio.h> int main(void) { int i; printf("2\n"); printf("3\n"); printf("5\n"); printf("7\n"); printf("11\n"); for (i=12;i<=120;i++){ if (i%2!=0 || i%3!=0 || i%5!=0 || i%7!=0 || i%11!=0){ printf("%d\n",i); } else{ printf(""); } } printf( "\n" ); return 0; }

  • *至急 200以下の素数を全て表示するプログラム

    題の通りです。 200以下の素数を全て表示するプログラムをfor文を使って作りたいのですがどうすればいいのか全く検討がつきません。 自分でもいろんなperlに関するサイトを見ましたが、わからなすぎて困っています。 参考になるサイトでもいいので、 教えてください。

  • Javascriptについて教えてください。

    Javascriptについて教えてください。 整数を入力してその入力した整数の約数の数を表示するプログラムを つくりたいのですがどうすればよいのでしょうか? 例えば、6と入力したらブラウザ上に約数の個数つまり、4と表示します。 また0以下の数字は整数を入力してくださいと表示されるようにしたいです。 途中までは作りました。 解説付きで教えてください。 <html> <head> <title>整数の約数の数を表示する</title> </head> <body> <p><script type="text/javascript"> <!-- var number; var i; number = prompt("整数を入力してください"); for(i = 0; i < 10;i++){ if(number <= 0) document.write("整数を入力してください。"); else if(number >= 1)

  • C言語プログラミング。

    標準出力から整数を読み込んで、その整数が奇数か偶数かを判定して、判定結果を出力するプログラムをif文を用いて作りたいんです。剰余演算子を使ってなら作れるんですけど、剰余演算子を使わないで作るにはどうすればいいのでしょうか。 よろしくおねがいします。

  • 2進数の表示

    初心者なんですが、 2進数を出すプログラムを作成したところ、 "1011"のように表示したいのですが、プログラム結果"1101"となってしまいます。 最後に逆から表示するしかたがわかりません。 どのようにしたら逆に表示されるのか教えてください。