码迷,mamicode.com
首页 > 其他好文 > 详细

关于素数打表跟判断素数的一些方法

时间:2016-05-07 13:08:34      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

判断一个素数是否为素数:

1:2-n-1。。。for暴力判断;

2:sqrt(n) 判断;

3:一个我也不知道为什么的代码,总之蛮快的

int prime(int n)
{
    if(n<=1)
    return 0;
    if(n==2)
    return 1;
    if(n%2==0)
    return 0;
    int k, upperBound=n/2;
    for(k=3; k<=upperBound; k+=2)
    {
        upperBound=n/k;
        if(n%k==0)
            return 0;
    }
    return 1;
}

4:判断一个大素数的米勒拉宾素数测试

  复杂度:O(k*log(n))k是测试的次数

素数打表:

1 埃拉特斯特尼筛法复杂度O(n loglog(n));

 for(i=0;i<MAX;i++)
        a[i]=1;
    a[0]=0;
    a[1]=0;
    for(i=2;i*i<MAX;i++){
       for(j=i+i;j<MAX;j+=i)
        a[j]=0;

2 欧拉筛法   复杂度O(n)

const int MAXN=3000001;
int prime[MAXN];//保存素数 
bool vis[MAXN];//初始化 
void Prime(int n)
{
    int cnt=0;
    memset(vis,0,sizeof(vis));
    for(int i=2;i<n;i++)
    {
        if(!vis[i])
        prime[cnt++]=i;
        for(int j=0;j<cnt&&i*prime[j]<n;j++)
        {
            vis[i*prime[j]]=1;
            if(i%prime[j]==0)//关键 
            break;
        }
    }
    return cnt;//返回小于n的素数的个数 
}

 

关于素数打表跟判断素数的一些方法

标签:

原文地址:http://www.cnblogs.com/jhz033/p/5468008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!