打印
[MM32软件]

判断素数的快速算法

[复制链接]
676|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
uiint|  楼主 | 2024-10-31 20:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们在日常判断素数的程序中常用到如下代码

//判断数num是不是素数
for(i=2;i<num;i++){

    if(num%i==0)
         return 0;

    return 1;
}
这样写无疑是没有问题的,但是我们实际做题可能会有算法时间复杂度的要求,或者说数据大的时候我们会等很久,算法效率低,那么有没有一种好的算法可以更快地判断是不是素数呢?

当然了,先附上代码段

//判断数num是不是素数
for(i=2;i<=sqrt(num);i++){

    if(num%i==0)
         return 0;

    return 1;
}
sqrt()函数是用来判断开根号的,那么我们这样用是为何呢?

比如想判断20是不是素数,我们都知道素数是除了1和数本身没有其他公约数的数,我们看,20可以分成如下公因子:



如果我们用老办法i=2到20一个一个判断是可以,但是没有必要

因为,我们可以使用sqrt来判断

//判断数20是不是素数
for(i=2;i<=sqrt(20);i++){

    if(num%i==0)
         return 0;

    return 1;
}


使用特权

评论回复
沙发
zhizia4f| | 2025-1-17 13:55 | 只看该作者
判断一个数是否为素数是计算机科学和数学中的一个经典问题。为了提高效率,通常会使用一些优化的算法。比如试除法

使用特权

评论回复
板凳
b5z1giu| | 2025-1-17 15:07 | 只看该作者
Miller-Rabin 素性测试,这是一种概率性算法,基于费马小定理和二次探测定理。它的效率较高,适合大数判断。

使用特权

评论回复
地板
w2nme1ai7| | 2025-1-17 16:17 | 只看该作者
AKS 是一种确定性算法,可以在多项式时间内判断一个数是否为素数。它的理论意义重大,但实际应用中效率不如 Miller-Rabin

使用特权

评论回复
5
lamanius| | 2025-1-17 18:11 | 只看该作者
埃拉托斯特尼筛法,这是一种用于生成素数列表的算法,适合判断一定范围内的素数

使用特权

评论回复
6
tax2r6c| | 2025-1-17 19:17 | 只看该作者
一般就是用所谓的试除法来操作的

使用特权

评论回复
7
l1uyn9b| | 2025-1-17 21:27 | 只看该作者
一步一步的除法呗,然后用循环操作就好了

使用特权

评论回复
8
t1ngus4| | 2025-1-18 09:01 | 只看该作者
就是直接判断,然后用循环操作呗

使用特权

评论回复
9
d1ng2x| | 2025-1-18 11:52 | 只看该作者
话说,数学库里是不是也有这种函数啊?现成的函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

4246

帖子

1

粉丝