用篩選法求100以內的素數(篩選法!!!)


#include<stdio.h>
#include<math.h>
int main()
{
    int a[101],i,j;

    for(i=1; i<=100; i++)
    {
        a[i] = i;   //為數組賦初值
    }
    a[1] = 0;//先去掉a[1]

    for(i=2; i<sqrt(100); i++)  //如果需要找1-n范圍內的素數表,只須進行到除數為根號下n(取整數就可)
    {
        for(j=i+1; j<=100; j++)
            if( a[i]!=0 && a[j]!=0 )
                if(a[j]%a[i] == 0)
                {
                    a[j] = 0;
                }

    }

    printf("\n");
    int n;

    for(i=2,n=0; i<=100; i++)
    {
        if(a[i]!=0)
        {
            printf("%5d",a[i]);
            n++;
        }

        if(n==10)
        {
            printf("\n");
            n = 0;//一次完成之后初始化
        }
    }


    return 0;
}

 

所謂篩選法是“埃拉托色尼篩法“,將一組數據逐個判斷他們是否素數,找出一個非素數,就把它挖掉,最后剩下的就是素數

算法可表示為;

(1)挖去1;

(2)用下一個未被挖去的數p除p后面各數,把p的倍數挖掉

(3)檢查p是否小於根號n的整數部分,如果是,則返回(2)繼續執行,否則就結束

(4)剩下的就是素數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM