C语言 求100-200中的全部素数 有几个地方没看明白 帮我解释下

#include<math.h>
main()
{
int m,k,i,n=0;
for(m=101;m<=200;m=m+2)
{
if(n%10==0) printf("\n");
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break;
if(i>=k+1)
{
printf("%d ",m);
n=n+1;
}
}
}

k=sqrt(m); 求m的平方根是什么意思?
从k=sqrt(m); 一下每一步我都没看明白 麻烦帮我详细讲解下

先解决为什么要开方这个问题,如判断17是不是质数,17的开方为4点多,我们就用2-4去除17
如果17可以整除4,那它的商也是可以被17整除,它的商肯定是不超过4的整数。
所以我们判断一个数n是否质数,只要用2-这个数的开方去除这个数就可以了。
#include<math.h>
main()
{
int m,k,i,n=0;
for(m=101;m<=200;m=m+2)
{
if(n%10==0) printf("\n");
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0) break; //如果2-k之间有一个数可以整除m,就用break跳出循环
if(i>=k+1) //循环后判断如i值>k,则表示它是循环中途用break跳出循环的,表示这个不是质数
{
printf("%d ",m);
n=n+1; //把质数的总数+1
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-29
一个奇数,如果它不能被2~sqrt(m)之间的所有整数整除(K是整数,所以sqrt(m)之后会取整给k),它一定是素数。
for(i=2;i<k;i++)就是指上面说的2~k,在这个for循环中让m一直对另一个数i求余,
1、如果m%i==0了,说明这个数肯定不是素数,就break结束循环,这时i肯定不会>=k+1,m不会被输出,转到3
2、如果m是素数,for循环会一直做下去,直到i=K+1时结束for循环,而这时i>=k+1是真的,就输出m的值
3、继续做下一个m