用筛选法求1到999的素数的

#include <stdio.h>
int main() {
int prime[1000] = {0}; // 初始化素数数组
int i, j;
for (i = 2; i <= 999; i++) {
if (prime[i] == 0) { // 如果当前数是素数
for (j = i * 2; j <= 999; j += i) {
prime[j] = 1; // 将当前数的倍数标记为合数
}
}
}
printf("1到999的素数:\n");
for (i = 2; i <= 999; i++) {
if (prime[i] == 0) {
printf("%d ", i); // 输出素数
}
}
printf("\n");
return 0;
}
筛选法的思路是从2开始,将所有2的倍数标记为合数,然后再找到下一个未标记的数(即3),将所有3的倍数标记为合数,以此类推,直到找到所有小于等于999的素数。在代码中,使用一个长度为1000的数组 prime 来标记每个数是否是素数。如果 prime[i] 为0,则表示i是素数;如果 prime[i] 为1,则表示i是合数。
筛选法的好处是可以快速地找出一定范围内的所有素数,算法的时间复杂度为O(nloglogn),其中n为范围的大小。相比于*力暴**枚举法,筛选法的时间复杂度更小,可以提高算法的效率。