使用埃拉托色尼筛法 选出小于10000的素数,时间复杂度为O(NlnlnN)
// 数组是基本的数据结构 我们可以把计算机的存储系统想象成一个数组
#include <stdlib.h>
#include <stdio.h>
// sieve of Eratosthenes 埃拉托色尼筛法
// 打印出小于10000的素数
#define N 10000
main(){
int i,j,a[N];
// 设置默认初始值为1即默认为素数
for (int i = 2; i < N; ++i) {a[i]=1;}
// 通过计算将其不为素数的数赋值为0
for (int i = 2; i < N; ++i) {
if(a[i])
// 将 i*j 的数肯定不为素数
for (int j = i; i*j <N ; ++j) {
a[i*j]=0;
}
}
// 剩下的数就为素数,然后输出
for (int i = 2; i < N ; ++i) {
if(a[i])
printf("%4d \t",i);
}
}