注册 登录
编程论坛 C语言论坛

求前100个素数,运行不出结果,请大神帮忙看看问题出在哪里?

fytothesy 发布于 2019-09-23 23:08, 1883 次点击
/* Note:Your choice is C IDE */
#include "stdio.h"
#include<math.h>
void main()
{
int i,m,k,n=0;
while(n!=100)
{
for(m=2;;m++)
{
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)   
break;
if(i>=k+1)
printf("%-5d",m);
n++;
}   
}   
}
}
5 回复
#2
自学的数学2019-09-24 08:29
程序代码:
#include <stdio.h>
#include <math.h>
int main(void)
{
  int i; /*外循环*/
  int j; /*内循环*/
  int flag; /*素数标志,flag为1则此数为素数*/
  flag = 0;
  //int n;
  i = 2;
  while( i <= 100)
  {
      j = 2;
      flag = 1; /*假设此数为素数*/
      while(j <= (int) sqrt(float(i)))
         {
          if(0 == (i %j))
          flag = 0; /*根据第三种算法可知次数不为素数*/
          j ++;
        }
   if(flag)
   printf("%d\t",i);
   i++;
  }
  printf("\n");
  return 0;
}
#3
林月儿2019-09-24 08:59
已经求的的素数也可以作为取模参数,可以增加循环的步长
#4
鸡蛋挑骨头2019-09-25 21:12
回复 2楼 自学的数学
sqrt函数使用的时候,float多余了吧
#5
陈锦鹏2019-09-25 22:05
#6
bcbbcclbbc2019-09-26 02:26
回复 楼主 fytothesy
第一个for循环语句,没有给出循环的结束条件,为死循环,所以也无法将n的值传递给while语句。
可以将判断条件n<=100加入到for语句中,构成一个完整的循环。
for(m=2;;m++)
{
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0)   
break;
if(i>=k+1)
printf("%-5d",m);
n++;
}   
}

1