大滝本4.2

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
こんどうさん  
(No.1)
お世話になります。
大滝本4.2「自然数nまでの素数を求める」の問題ですが、どこの段階でprime i=【4】に1が入ったのでしょうか。
prime j=【4】になったのは分かります。
iとjは別々に管理しないといけないと思ってますが、その考えがまず違うのでしょうか。
2024.02.13 10:56
SUTさん 
(No.2)
こんにちは。
この問題ですが、私も理解するのに手こずりました。

結論から申し上げると、i=2の時に、prime(4)には「1」が入っています。

iとjを全く別、と考えるとわけわからないことになってしまいます。

既に図1の実行回数は書かれているので、
書き換えた後の図2の処理を行ってみます。
図1と変わった点は9行目に「if(prime(i)=0」の条件が追加されております。
これは配列primeのi番目の値が0の時に以下の処理を実行する、ということです。

まず指示に従い、i=2で処理を進めます。

【i=2】

「if(prime(2)=0」
j←2×2

while(4<=25)
prime(4)←1
j←4+2

while(6<=25)
prime(6)←1
j←6+2

while(8<=25)
prime(8)←1
j←8+2

~以下割愛。

j=24になるまでこのように繰り返して行き、
j=24になったら処理を終了して今度はi=3で処理を行っていきます。

【i=3】
「if(prime(3)=0」
j←2×3

while(6<=25)
prime(6)←1
j←6+3

while(9<=25)
prime(9)←1
j←9+3

while(12<=25)
prime(12)←1
j←12+3

~以下割愛

j=24まで行ったら次の処理になります。
次はi=4の処理ですが、問題はこの処理です。
追加された処理を確認してみて下さい。

「if(prime(i)=0」

i=4の時、既に一番最初で行ったi=2の時の処理で、prime(4)には1が埋められております。

そのため処理はは実行されず、i=5の処理が行われます。

i=4の処理を行ったと仮定すると、
8.12.16.20.24の5回分です。
この処理が省略されます。

図1では27回の処理が行われます。
図2ではi=4の時の5回分の処理が省略されるので、

27回-5回で
合計22回の処理が行われます。
従って答えは「ク」になります。
2024.02.13 15:02
SUTさん 
(No.3)
補足です。
各処理を実行した際の結果です。

i=2
prime(4)←1
prime(6)←1
prime(8)←1
prime(10)←1
prime(12)←1
prime(14)←1
prime(16)←1
prime(18)←1
prime(20)←1
prime(22)←1
prime(24)←1

i=3

prime(6)←1
prime(9)←1
prime(12)←1
prime(15)←1
prime(18)←1
prime(21)←1
prime(24)←1

i=4

prime(4)←には既に「1」が格納されているため、処理は行われず。

i=5
prime(10)←1
prime(15)←1
prime(20)←1
prime(25)←1
2024.02.13 15:18
まきさん 
(No.4)
>SUTさん
詳しい解説ありがとうございました。解説嬉しいです
私もこの問題何が違うのか分からない状態でした。
primenumber(25)=5まで行うんだとは、分かっても本質的なことが分かっていなかったため何か腑に落ちないままでした。

最悪  2の倍数から5の倍数までを数えればいいのかとは思いましたが、
時短で出来ることはないかと感じてました。
2024.02.13 15:45
こんどうさん  
(No.5)
SUT様
ありがとうございます(;o;)iとjを全く別物と考えていたため分からなかったようです。
jはiの倍数とするので、2の倍数を処理した時に4にも1が入れられるのですね。ご丁寧にありがとございます、大変助かりましたm(_ _)m
2024.02.13 16:03

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop