找素數

(1)增加布爾型數組

找到一個素數,則其所有倍數均不是素數

#include <stdio.h>
#include <string.h>
#include <math.h>
int prime(int i)
{
    int j;
    for(j=2;j<=sqrt(i*1.0);j++)
    {
        if(i%j==0)
        return 0;
    }
    return 1;
}
int main()
{
 int n,i;
 int num[100000],p[10000];
 int t;
 memset(num,0,sizeof(num));
 memset(p,0,sizeof(p));

    t=0;
    num[0]=num[1]=1;
    for(i=2;i<=100000;i++)
    {
        if(num[i]==0)
        {
            if(prime(i)==1)
            {
                p[t++]=i;
                for(int j=2;j*i<=100000;j++)
                    num[i*j]=1;
            }
        }
    }
    for(i=0;i<t;i++)
        printf("%d ",p[i]);
    return 0;
 }


 

(2)儲存素數在數組p中

         找到的數不能被小於立方根的素數整除則爲素數,,否則爲合數

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    int p[10000];
    int n,i;
    int j;
    int num;
    while(scanf("%d",&n)!=-1)
    {
        num=2;
        memset(p,0,sizeof(p));
        p[0]=2;
        p[1]=3;
        int flag;
        for(i=4;i<=n;i++)
        {
            flag=0;
            double x=sqrt(i*1.0);
            for(j=0;p[j]<=x;j++)
            {
                if(i%p[j]==0)
                {
                    flag=1;
                    break;
                }
            }
            if(flag==0)
                p[num++]=i;
        }
        for(i=0;i<num;i++)
            printf("%d ",p[i]);
    }
    return 0;
}

 (3)歐拉篩法

#include <stdio.h>
#include <string.h>
#include <math.h>
#define maxn 1000005
int num[maxn];
int p[maxn];
int tot;
void prime()
{
    int i;
    int j;
    memset(num,0,sizeof(num));
    for(i=2;i<=maxn;i++)
    {
        if(num[i]==0)
            p[tot++]=i;
        for(j=0;j<tot,i*p[j]<maxn;j++)
        {
            num[i*p[j]]=1;
            if(i%p[j]==0)           //保證每個數都是由最小的素因數篩去
                break;
        }
    }
    return ;
}
int main()
{
    prime();
    int i;
    for(i=0;i<100;i++)
        printf("%d ",p[i]);
    printf("\n");
    return 0;
}

發佈了58 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章