現在、独習Cで勉強しているものです。
さて、83ページの練習3.6の問題で質問があります。
問題は、「2~1000までの素数を見つけて、表示せよ。」というもので、
答えは、
#include <stdio.h>
int main(void)
{
int i,j,prime;
for(i=2;i<1000;i++){
prime = 1;
for(j=2;j<=(i/2);j++)
if(!(i%j))
prime = 0;
if (prime)
printf("%dは素数です\n",i);
}
return 0;
}
コードですが、まず外側のfor文で、2から1000までインクリメントしつつ、
内側のfor文で、素数を見つけていると思うのですが、
primeが1のとき、真となり、そのときは、素数判定とし、
primeが0のときは、偽となり、そのときは、表示しないかと思います。
ただ、if(!(i%j))の意味がよくわかりません。
たとえば、iが11だったとします。
すると、2<=11/2、3<=11/2、4<=11/2、5<=11/2、
いずれも、条件を満たすと思います。
そうすると、%の結果も、それぞれ、1,2,3,1となると思いますが、
このあと、if(!(i%j))、prime = 0;の処理をしている意味がどうしてもわかりませんでした。
おそらく、素数判定をしているのだと思うのですが、漠然としていて、お手上げでした。
ご回答いただければ、ありがたいです。
よろしくお願いします。