平成25年度 春期
応用情報技術者試験問題と解答
問7
配列Aに対して次の手続を実行して、2≦k≦100
である素数 k だけを全て出力したい。a、b、cに
入るループの初期値、終値、増分として、適切な組合
せはどれか。

 for k = 2 to 100 step 1:
   A[k] = 1;
 for m = 2 to 10 step 1:
   for k =  a  to  b  step  c  :
   A[k] = 0;
 for k = 2 to 100 step 1:
   if A[k]≠0:
     print k;

   ┌───┬───┬───┐
   │ a │ b │ c │
 ┌─┼───┼───┼───┤
 │ア│ 2 │ m2 │ 1 │
 ├─┼───┼───┼───┤
 │イ│ 2m │100│ m │
 ├─┼───┼───┼───┤
 │ウ│ m │ m2 │ m │
 ├─┼───┼───┼───┤
 │エ│ m2 │100│ 1 │
 └─┴───┴───┴───┘



【正解】 イ

for k = 2 to 100 step 1:
  A[k] = 1;
は配列Aをすべて1で初期化している。

for k = 2 to 100 step 1:
  if A[k]≠0:
    print k;
では、配列Aの値が0でないもの、すなわち、1のものを
出力している。

従って、
for m = 2 to 10 step 1:
  for k =  a  to  b  step  c  :
    A[k] = 0;
では、2の倍数や3の倍数など、素数でない数字について
Aの配列の値を0にしていることが分かる。

考え方としては、
2以外の2の倍数、つまり2×
以上の2の倍数について、0をセットして除く
3以外の3の倍数、つまり2×
以上の3の倍数について、0をセットして除く
4以外の4の倍数、つまり2×
以上の4の倍数について、0をセットして除く
(但し、4については、2の倍数について0をセットするループ内で、
 既に除かれている。 事実上、意味はないが、ロジック上やむを得ない)
5以外の5の倍数、つまり2×
以上の5の倍数について、0をセットして除く
・・・

ということになり、終値は
100まで、増分はである。

EXCEL VBAのご相談なら ファーストマクロ 



問6 目次 問8
ファーストマクロ TOPページ