请帮忙解释下
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
中
for(m=101;m<=200;m++)
{ k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap) {printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
这是素数(又称质数)问题,首先要弄清一个常识,任何一个合数n,它的因数k和l(n=k*l)中只能有其中一个小于n的平方根或者他们就是n的平方根。也就是说只要n能分解,必可在2到n的平方根的区域中存在n的因数。
for(m=101;m<=200;m++) //从101开始,到200的区间,准备找出素数
{ k=sqrt(m+1); //若m为合数,在2到m的平方根这个区间必有它的真因数,当然区间适当扩大一点也不无不可。
//判断2到k区间是否有m的真因数
for(i=2;i<=k;i++)
if(m%i==0) //i是m的真因数吗?m%i表示m除i所得的余数,余数为0,肯定i是真因数
{leap=0;break;} //i是m的真因数,让标记leap=0,离开循环判定
//m是否为素数已经获得结论,leap=0,m合数;leap=1,m素数。
//根据leap的值进行相应操作
if(leap) //leap=0,表示m是合数;leap=1表示m没有真因子,是素数。 { printf("%-4d",m); //输出素数m,常宽为4 h++; //素数个数累加1
if(h%10==0) //一行输出的素数够10个就换行
printf("\n");
}
leap=1; //标记置1;准备进行下一个数的判断
}
//循环判定结束
printf("\nThe total is %d",h);
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息