利用埃拉託斯特尼篩法求1-n之間的素數
阿新 • • 發佈:2019-02-17
定義:
素數又稱質數,素數定義為在大於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; }