篩法求素數--求100之內的素數
篩法求素數,需要對素數和非素數做出不同的標記,或者只標記非素數(素數),現用0標記非素數,素數不標記。
引用陣列,使0-100與陣列元素一 一相對應(0即a[0],1即a[1],2即a[2]········)
注意特例,1(即a[1])不是素數,首先標記為0;
剩下的數字當中(2-100),用下一個還沒有被判斷的數去除它後面的數字,如果能除盡,把這個數標記為0。
剩下的沒有標記過的(非0)數字就為素數。
一行輸出10個。
程式碼:
#include<stdio.h>
#include<math.h>
int main()
{
int a[100],i,j,n;
for(i=0;i<100;i++)
a[i]=i;//引用陣列,使0-100與陣列元素一 一相對應(0即a[0],1即a[1],2即a[2]········)
a[1]=0;//1不是素數,標記為0.
for(i=2;i<sqrt(100);i++)//剩下的數字當中(2-100),用下一個還沒有被判斷的數去除它後面的數字,如果能除盡,把這個數標記為0。
{
for(j=i+1;j<100;j++)
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
for(i=0,n=0;i<100;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;//累積本行已輸出的資料個數
}
if(n==10)//:記錄有多少個素數,滿10 個素數就輸出一行。
{
printf("\n");
n=0;//不能忘,n再一次初始化為0;
}
}
printf("\n");
return 0;
}