プロが教えるわが家の防犯対策術!

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

A 回答 (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");
}



?>
    • good
    • 1
この回答へのお礼

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

お礼日時:2008/01/20 13:25

こんな感じ?数字でかくしすぎると処理長いです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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/20 13:37

http://okwave.jp/qa2797000.html

素数の求め方は、私も、暇だった頃に、作ったことがあります。
私は関数の再帰を利用したような。
自分で考えてみることが出来る、適度な難しさだと思いますよ。

考え方としては、エラトステネスのふるいが有名です。

素数リストに加えられた数の全ての倍数を、探索リストから削除する方法です。
ただし、この方法だと配列が膨れるという欠点があります。

コンピュータは同じ作業を素早く出来るから、目標の数を目標の数の半分の数まで割り続けるのも、手ですよ。

97は素数ですが、1から48まで割れなかったら、素数です。
49以上だと、2で割れなくなるので(つまり割れたとしても小数点になるので)、素数ではなくなるという訳です。

この方法だと、メモリーは少なくなりますが、恐ろしく時間がかかります。w
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/20 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!