- ベストアンサー
php で1から100までの素数の表示の仕方を教えてください
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
<?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"); } ?>
その他の回答 (2)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
こんな感じ?数字でかくしすぎると処理長いです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 . " "; } 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; }
お礼
ありがとうございます。これでなんとかなりそうです。本当にありがとうございました。
http://okwave.jp/qa2797000.html 素数の求め方は、私も、暇だった頃に、作ったことがあります。 私は関数の再帰を利用したような。 自分で考えてみることが出来る、適度な難しさだと思いますよ。 考え方としては、エラトステネスのふるいが有名です。 素数リストに加えられた数の全ての倍数を、探索リストから削除する方法です。 ただし、この方法だと配列が膨れるという欠点があります。 コンピュータは同じ作業を素早く出来るから、目標の数を目標の数の半分の数まで割り続けるのも、手ですよ。 97は素数ですが、1から48まで割れなかったら、素数です。 49以上だと、2で割れなくなるので(つまり割れたとしても小数点になるので)、素数ではなくなるという訳です。 この方法だと、メモリーは少なくなりますが、恐ろしく時間がかかります。w
お礼
ありがとうございます、参考になりました。試してみます
関連するQ&A
- 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
- 確認したいのでやってみてください
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・C++・C#
- 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 この問題の@の部分に入る数字、記号を教えて欲しいのとなぜそうなるのかも教えていただきたいです(-。-;
- ベストアンサー
- C・C++・C#
- 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; }
- ベストアンサー
- C・C++・C#
- *至急 200以下の素数を全て表示するプログラム
題の通りです。 200以下の素数を全て表示するプログラムをfor文を使って作りたいのですがどうすればいいのか全く検討がつきません。 自分でもいろんなperlに関するサイトを見ましたが、わからなすぎて困っています。 参考になるサイトでもいいので、 教えてください。
- 締切済み
- 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)
- ベストアンサー
- JavaScript
- C言語プログラミング。
標準出力から整数を読み込んで、その整数が奇数か偶数かを判定して、判定結果を出力するプログラムをif文を用いて作りたいんです。剰余演算子を使ってなら作れるんですけど、剰余演算子を使わないで作るにはどうすればいいのでしょうか。 よろしくおねがいします。
- 締切済み
- C・C++・C#
お礼
ソースを書いてくれてすごく助かりました。本当にありがとうございます。