程序目的是输出前50个素数,为什么从4就循环不了?看了半小时了还是没看出来哪里有问题。
两个地方修改下:
第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;
}