用篩選法求1—100以內的素數(此法難度的話,方法能夠不界定:能完成求1—100以內的素數便可)。
在一張紙上寫上1到100所有整數,而後逐個判斷它們是不是素數,找出一個非素數,就把它挖掉,最後剩下的就是素數。
具體作法以下:
先將1挖掉(由於1不是素數,可將該數置爲0)。
用2去除它後面的各個數,把能被2整除的數挖掉,即把2的倍數挖掉。
用3去除它後面的各數,把3的倍數挖掉。
分別用四、5各數做爲除數去除這些數之後的各數。
這個過程一直進行到在除數後面的數已全被挖掉爲止。
例如找1~50的素數,要一直進行到除數爲49爲止(事實上,能夠簡化,若是須要找1~n範圍內素數表,只需進行到除數爲n^2(根號n),取其整數便可。例如對1~50,只需進行到將50^2做爲除數便可。)
如上算法可表示爲:挖去1; a[1]=0用剛纔被挖去的數的下一個數p去除p後面各數,把p的倍數挖掉;
for(i=2;i<=sqrt(100);i++){
for(j=i+1;j<=100;j++)
if(a[j]%a[i]==0)
a[j]=0;
}
檢查p是否小於n^2的整數部分(若是n=1000,則檢查p),若是是,則返回(2)繼續執行,不然就結束;<4>紙上剩下的數就是素數。
#include<stdio.h>
#include<math.h>
int main()
{
//cout<<"100之內的所有素數:"<<endl;
printf("100之內的所有素數: \n");
int i,j,k;
int a[101];
for(i=1;i<=100;i++) a[i]=i;
a[1]=0; //先挖掉a[1]
for(i=2;i<sqrt(100);i++){
for(j=i+1;j<=100;j++){
if(a[i]!=0&&a[j]!=0){
if(a[j]%a[i]==0){
a[j]=0; //把非素數挖掉,不是素數的都賦值爲0
}
}
}
}
printf("\n");
for(i=1,k=0;i<=100;i++){
if(a[i]!=0){ //選出值不爲0的數 即素數
//cout<<" "<<a[i];
printf("%d ",a[i]);
k++;
}
if(k==10){ //輸出10個數後換行
printf("\n");
k=0;
}
}
printf("\n");
return 0;
}