你参考下,这是1000以内的:
#include <stdio.h>
#define NPRIMES 1000
#define FALSE 0
#define TRUE 1
int main(void) {
int n;
int i,j;
int flag;
int primes[NPRIMES]; // 保存比 n 小的
素数 int level; // 当前素数的数目加1
printf("Enter value of N > ");
scanf("%d",&n);
level = 0;
for(i=2;i<=n;i++) {
for(j = 0, flag = TRUE; j<level && flag; j++)
flag = (i%primes[j]);
if (flag) { // i 是一个素数
printf("%12d\n", i);
if (level < NPRIMES)
primes[level++] = i;
}
}
}
追问我只想知道我为什么编的是错的
追答你把printf("%4d",i);放在了内循环体里,会打印j-2次的。
正确的方法是:每个值判断时初始置素数标志为1,如果非素数,置标志为0,break。在循环外如果是1再打印即可。