PHPの簡単なプログラムに関しての質問です。

<?php
echo "整数を入力:";
$a = trim(fgets(STDIN));
$result = false;
$n = 2;
while($n <= $a / 2){
if ($a % $n == 0){
$result = true;
}
$n++;
}
if ($result){
echo $a . "は、素数じゃないです。";
} ・・・以下略
?>
上記は素数を判定するかんたんなPHPプログラムです。
入門書に記載あったものですが、説明が省略されているため
理解できない部分があった為質問させていただきました。
以下2点質問です。

1点目:4行目に $result = false; とありますが
いきなりresultという変数が登場していてその意図がわかりません。
またfalseとありますが何の二者択一に関してfalseなんでしょうか?

2点目:6~11行目のwhile文に関してですが
条件文の「変数aを2で割った値が変数n以上の場合」という部分は
理解できたのですが繰り返す処理のところがよくわかりません。
また{ $result = true; }と $n++;の部分のつながりがわかりません。
elseなどが無いので$n++;の部分は単にif文の次の処理で
関連性は無いものなのでしょうか?

質問文がわかりにくかったら申し訳ありません。
1時間ぐらい考えていたのですがよくわかりませんでした。
どうぞ宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/06/12 23:29:09
  • 終了:2011/06/13 00:35:01

回答(1件)

id:pyopyopyo No.1

pyopyopyo回答回数348ベストアンサー獲得回数862011/06/12 23:59:41

ポイント100pt

順番に説明します。


まず1点目。4行目の $result 変数は、素数の判定結果を保存する為の変数です。

このプログラムでは $result 変数で

  • $result が true の場合 → 変数$a の値は素数では無い、
  • $result が false の場合 → 変数$a の値は素数である、

ということを表す様になってます。

つまり"素数"か"否か"の二者択一です。


だから後半で

if ($result){

echo $a . "は、素数じゃないです。";

} ・

という処理ができるのです。


2点目ですが、gutenmorgen さんの理解であってます

elseなどが無いので$n++;の部分は単にif文の次の処理です。

関連性もありません。

念の為、もうすこし細かく説明すると、

$n = 2;

while($n <= $a / 2){

   $n++;

}

の部分でまず、 2,3,4,5,・・・,($a/2) と $n を順番に増加させていって

if ($a % $n == 0){

$result = true;

}

の部分で、 ($a % $n) がゼロの場合だけ $result = true としています。

このif 文は elseの部分は無いので、 ($a % $n) がゼロ以外の場合は、何も処理を行いません。

この部分で 一回でも if 文の所で $result= true;が実行されると、

$result の値が true になるので、この変数$a は素数では無い、という判定になります。


反対に、一度も $result = true;が実行されない場合は、

4行目の $result = false; の処理があるので、 $result の値は false になるので

この変数$a は素数、という判定になります

id:gutenmorgen

詳しくありがとうございます。

大変わかりやすい説明でだいぶん理解が進みました。

本のほうはまだ前半を読んでるところでして、また質問すると思うので

今後とも宜しくお願いします。

2011/06/13 00:34:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません