素数 的两种判断方法

正常的判断函数:

bool is_prime(int n)
{
    int i;
    if(n <= 1)
    {
        return false;
    }
    for(i=2;i*i<=n;i++)
    {
        if(n % i== 0)
        {
            return false;
        }
    }
    return true;
}

输入一个数即可判断是否为素数




省时间复杂度的Eratosthenes素数判断方法:

#include <iostream>
using namespace std;
const int maxnum=1000;
int main()
{
    int i,j,c=0;             
    int prime[maxnum+1];                   //定义保存素数的数组  
    for(i=2;i<=maxnum;i++)           
        prime[i]=1;                                 //将保存素数的数组中的数全部标记为 1    这个 1 代表我是素数
    for(i=2;i*i<=maxnum;i++)              //循环处理前i个
    {
        if(prime[i]==1)                           //若为素数,则进行赛选
        {
            for(j=2*i;j<=maxnum;j++)     //进行反标记
            {
                if(!prime[j])continue;        //若prime[j]已经是反标记完的,就继续进行
                if(j%i==0)                        //如果j可以整除,对其进行反标记
                    prime[j]=0;
            }
        }
    }
    for(i=2;i<maxnum;i++)
    {
        if(prime[i])
        {
            cout<<i<<' ';
            c++;
            if(c%10==0)
                cout<<endl;
        }
    }
    cout<<"有"<<c<<"个素数!";
}


Eratosthenes素数判断方法可以更简便的求一定范围的素数。


看懂了这段代码大家会有很大的感触!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值