課題2 解答例 (レベル2)

#include <stdio.h>

main()
{
  int n, i, p, c;

  c = 0;
  for(n=2; n<=1000; n++){
    p = 0;
    for(i=2; i<n; i++){
      if(n % i == 0){
	p++;
      }
    }
    if(p == 0){
      c++;
    }
  }
  printf("%d primes between 2 and 1000\n", c);
}
この課題(素数)が難しい, という声が多数あるようです.

まず, 自分が手作業やるのだったらどのようにするだろうかを考えます. たとえば 97 という数が与えられたとしたら,

という具合に順に割算をしていって,
すべてで割れなかったら, 素数
と判定しますよね. ここまで考えれば, あとはプログラムでループを組んで順に割算をしていき, 「すべてで割れなかった」ことを調べればよい. そのためには,
「割り切れてしまった回数」をかぞえておく
ことにすれば, ループが終った時にその回数が 0 かどうかで 判断をつけることができます.
素数を求めるプログラムの改良方法はいろいろあります. といったアイデアをつかえばよいでしょう.
prev index next