程序目的是输出前50个素数,为什么从4就循环不了?

程序目的是输出前50个素数,为什么从4就循环不了?看了半小时了还是没看出来哪里有问题。

img

两个地方修改下:
第206行for()前面插入一行:b = 1;
第212行 if(b==1) 修改为:if(b ==1 && x != 1) ,排除 1 不是素数。

while 的条件应该是x<50吧,a只是你用于控制没行打印5个数的控制变量

#include <math.h>
#include <stdio.h>

// Returns 1 if x is a prime number, otherwise returns 0.
int is_prime(int x) {
  if (x <= 1)
    return 0;
  int n = (int)sqrt(x);
  for (int i = 2; i <= n; i++)
    if (x % i == 0)
      return 0;
  return 1;
}

int main() {
  for (int i = 1, x = 2; i <= 50; i++, x++) {
    while (!is_prime(x))
      x++;
    printf("%5d", x);
    if (i % 5 == 0)
      printf("\n");
  }
  return 0;
}
$ g++ -Wall main.c
$ ./a.out
    2    3    5    7   11
   13   17   19   23   29
   31   37   41   43   47
   53   59   61   67   71
   73   79   83   89   97
  101  103  107  109  113
  127  131  137  139  149
  151  157  163  167  173
  179  181  191  193  197
  199  211  223  227  229

不要这么去求素数,给你个官方标准
你只需要弄个while (n < 50) ,然后一直调用即可

int is_prime(int n)
{
    if(n <= 3)
        return n > 1;
 
    for(int i = 2; i * i <= n; i++)
       if(n%i == 0)
           return 0;
 
    return 1;
}