1. 程式人生 > >【C語言】 利用篩選法求100以內的素數

【C語言】 利用篩選法求100以內的素數

演算法思路:

原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質數的倍數篩掉。

程式碼如下:

//C語言 篩選法求100以內的素數
//原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質
//數的倍數篩掉。
//我們將從2開始 用2除後面的數,如果後面的數能被2整除 那麼那個數一定不是素數
#define N 100 
#include "stdio.h"
int main(){
	int i,j;
	int arr[N];

	for(i = 0;i<N;i++){//對陣列賦值  1-100
		arr[i]=i+1;
	}
	arr[0] = 0;//1不是素數,所以將下標0 的元素設定為0
	
	//進行素數判斷:我們將從2開始 用2除後面的數,如果後面的數能被2整除 那麼那個數一定不是素數,將那個數置為零
	for(i = 1;i < N-1;i++){
		for(j = i+1;j < N;j++){
			if(arr[i] != 0 && arr[j] != 0)//如果進行到3的時候2後面一定有數被置為0了,這裡我們需要判斷一下是不是有0
			if(arr[j] % arr[i] == 0){
				arr[j] = 0;
			}
		}
	}
	//迴圈輸出
	for(i = 0;i<N;i++){
		if(arr[i] != 0)
			printf("%d\n",arr[i]);
		
	}

return 0;
}

結果如下: