プログラムの最適化とループ条件

■ 解き方の方針 二つの関数が数えている対象をそろえます。function1は n以上m以下にある4の倍数 を一つずつ調べています。function2では、最初の4の倍数を見つけた後、4刻みで同じ対象だけを数えればよいと分かります。 ■ 問題文の整理 function1: nからmまでの全整数を調べ、4で割った余りが0のときだけcountを増やします。 function2の前半: tempNをnから少しずつ増やし、最初の4の倍数へ合わせます。 function2の後半: 最初の4の倍数からmまで、4の倍数だけをたどってcountを増やします。 ■ 空欄aを決める 整数を4で割った余りは0、1、2、3のいずれかです。nが4の倍数でなければ、最初の4の倍数へ到達するまでにtempNを増やす回数は最大3回です。 n mod 4=0:最初の判定で4の倍数と分かり、直ちに終了します。 n mod 4=1:n→n+1→n+2→n+3と、3回増やせば4の倍数になります。 n mod 4=2:2回、n mod 4=3:1回増やせば4の倍数になります。 最悪の場合に必要な3回の加算を実行できればよいので、aは「iを1から3まで1ずつ増やす」です。 ■ 空欄bを決める 前半終了時のtempNは、n以上で最初に現れる4の倍数です。以後の4の倍数はtempN、tempN+4、tempN+8、…と並びます。 したがって、bは「jをtempNから始めてmを超えない範囲で4ずつ増やす」です。 ■ 正解と誤答の見分け方 aとbの両方を満たす組合せは カ です。aが2回ではn mod 4=1のときに不足します。bを1ずつ増やすと4の倍数でない値まで数え、nやtempNを刻み幅にすると4の倍数を一定間隔で列挙できません。

次のプログラム中の  a  と  b  に入れる正しい答えの組合せを、解答群の中から選べ。
関数 function1 が受け取る引数と、関数 function2 が受け取る引数とが同じとき、二つの関数は同じ値を返す。ここで、引数nと引数mは正の整数であり、引数mは引数nよりも10以上大きい数とする。

[プログラム]
○整数型:function1(整数型:n, 整数型:m)
整数型:count ← 0
整数型:i
for (iをnからmまで1ずつ増やす)
if ((i mod 4)が0と等しい)
count ← count + 1
endif
endfor
return count

○整数型:function2(整数型:n, 整数型:m)
整数型:count ← 0
整数型:tempN ← n
整数型:i, j
for (  a  )
if ((tempN mod 4) が0と等しい)
繰返し処理を終了する
endif
tempN ← tempN + 1
endfor
for (  b  )
count ← count + 1
endfor
return count

出典令和7年度 基本情報技術者試験 科目B 問1

a

b

ア

iを1から2まで1ずつ増やす

jをnから始めてmを超えない範囲でtempNずつ増やす

イ

iを1から2まで1ずつ増やす

jをtempNからmまで1ずつ増やす

ウ

iを1から2まで1ずつ増やす

jをtempNから始めてmを超えない範囲で4ずつ増やす

エ

iを1から3まで1ずつ増やす

jをnから始めてmを超えない範囲でtempNずつ増やす

オ

iを1から3まで1ずつ増やす

jをtempNからmまで1ずつ増やす

カ

iを1から3まで1ずつ増やす

jをtempNから始めてmを超えない範囲で4ずつ増やす