永发信息网

求 解释素数代码

答案:1  悬赏:10  手机版
解决时间 2021-08-12 08:47
  • 提问者网友:捧腹剧
  • 2021-08-11 12:35

请帮忙解释下

#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);

最佳答案
  • 五星知识达人网友:几近狂妄
  • 2021-08-11 13:51
这是素数(又称质数)问题,首先要弄清一个常识,任何一个合数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);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯