质数判断

本文详细介绍了判断正整数是否为质数的三种方法:最基本的方法、利用素数唯一分解定理的方法及Rabin-Miller算法,并提供了一种筛选法来列举指定范围内的所有质数。此外,还提供了理解和应用Rabin-Miller算法的资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】给定一个正整数n,如何判断其是否质数呢?

1、方法一:最基本的,将其除以[2, squt(n)],只要有一个数可以整除就不是质数;

2、方法二:根据素数唯一分解定理:任何一大于1的整数均可以分解为素数的乘积,若不考虑素数乘积的先后顺序,则分解式是唯一的。

    由此可知,我们并不需要测试第一种方法里的所有数字,而只需要提取其中的质数,如果要是用这个方法就需要先生成[2, squt(n)]范围内的质数列表。

2.1、给定一个正整数x,列举其中的所有质数

    针对此问题可以使用筛选法具体实现上看可以建立一个x大小的数组且全部初始化为真。忽略1,从2开始,判断发现2是质数,于是将所有2的倍数标志为假;轮到3,发现3是质数,于是标记所有3的倍数为假;忽略4;发现5是质数,于是标记所有5的倍数.....

    通过此方法即可得到[2, x]区间内的所有质数列表,通过这张表可以判断[2, x^2]范围内的正整数是否是素数。

3、方法三:Rabin-Miller算法

    这算法特么的看不懂,还有出错概率,有谁有兴趣的自己参考以下资料吧:

    来自 @highyyy:http://blog.youkuaiyun.com/highyyy/article/details/6315559

    来自 @Panda_Ming:http://blog.youkuaiyun.com/panda_ming/article/details/7227222

    来自 @lxd:http://lxd6366.blog.163.com/blog/static/245542522010213115854564/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值