1. 程式人生 > >篩法求素數--求100之內的素數

篩法求素數--求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;
}