定义:
素数又称质数,素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
方法:
采用埃拉托斯特尼筛法,每次消去2、3、4、5 、6 、、、、、、的倍数,直到没有可消的为止,剩下的数字则为素数;
每次考虑消去的第一个数为p*p, p<=sqrt(n);
时间复杂度为O(n*logn);空间复杂度O(n)。
代码:
#include <stdio.h>
#include <math.h>
const int MAX = 10000;//定义n的最大值
int prime[MAX];
int n;
/*
采用埃拉托斯特尼筛算法:
依次消去2、3、4、5、6、、、、、的倍数,直到没有消的为止;
每次考虑消去的第一个数p*p,p<=sqrt(n);
*/
void get_prime(){
for(int i = 2; i <= sqrt(n); i++){
int k = i;
for(int j = i * i; j <= n; j = i * k ){
prime[j] = 0;//将非素数标记为0;
k++;
}
}
}
int main() {
while(scanf("%d",&n) == 1 && n) {
for(int i = 0; i <= n; i++) {
prime[i] = i;
}
get_prime();
for(int i = 0; i<=n; i++) {
if(prime[i] != 0) {
printf("%5d",prime[i]);
}
}
printf("\n");
}
return 0;
}