判断素数的简单算法

本文介绍了三种判断素数的算法优化方法:1)基础定义法;2)通过只搜索到平方根来改进效率;3)利用素数分布规律进行优化,以6为步长进行判断。通过这些方法,可以更高效地识别素数。
部署运行你感兴趣的模型镜像

1、定义法
素数是指只能被1和它本身整除的数。根据定义,只要在2到n-1(n是被判断的数)中逐一去找有没有能被它整除的数。有就不是,否则就是。
C语言伪代码如下

bool Isprime(int num)
{
    if (num <= 1) // 将小于起始值的 0 和 1排除
        return false;
    if(num == 2) // 数学中规定 2 是素数,这个边界值千万不要出错
        return true;
    for (int i = 2; i < num; i++)
    {
        if (num%i == 0)
            return false;
    }
    return true;
}

2、定义法改进
若所给定的数num不是素数,那么存在不等于 1 的两个约数x1 和 x2,并且满足x1 >= sqrt(num),x2 <= sqrt(num)。因此可直接搜索范围从2到sqrt(num)就可以, 使得搜索范围减少。
C语言伪代码如下

bool Isprime(int num) 
{
    int end = sqrt(num)+1;  // end是结尾,由于是int,开根号后要 +1
    if (num <= 1)  //边界值处理,同上
        return false;
    if(num <= 2)
        return true;
    for (int i = 2; i < end; i++)  //搜索范围减少
    {
        if (num%i == 0)
            return false;
    }
    return true;
}

3、素数分布优化
素数有一个特点,总是满足 num = 6x - 1 或 num = 6x + 1,其中 x 为自然数且有 x >= 1。
证明:6x 肯定不是素数,因为可以被 6 整除;
6x + 1 未知;
6x + 2 肯定不是素数,可以被 2 整除;
6x + 3 肯定不是素数,可以被 3 整除;
6x + 4 肯定不是素数,可以被 2 整除;
6x + 5 未知, 并且 6x + 5 等同于 6x - 1;
因此,对于大于等于 5 的素数,不能表示成 6x - 1 或 6x + 1 的一定不是素数。能表示的部分,有一些不是素数。因此,只需找到不是素数的这部分的就可以了。 因此,在遍历的时候就可以以 6 为步长来进行判断。

bool Isprime(int num) 
{
    int end = sqrt(num)+1;  // end是结尾,由于是int,开根号后要 +1
    if (num <= 1)  //边界值处理,要将2,3这俩素数剥离
        return false;
    if(num <= 3)
        return true;
    if (num%6 != 1 && num%6 != 5) //将 6x+1 和 6x+5 之外的数排除 
	return false; 
    for(int i=5; i<end; i+=6)  //求num能否整除 满足6x+1 和 6x+5的
    {
        if(num%i == 0 || num%(i+2) == 0)
            return false;
    }
    return true;
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值