找回密码
 欢迎注册
查看: 8047|回复: 4

[讨论] 不大于某个数的最大素数

[复制链接]
发表于 2010-1-8 17:28:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
设N为介于10^4-10^20间的某个整数,求不大于$sqrt(N/2)$的最大素数的高效方法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-8 17:42:08 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-8 20:23:19 | 显示全部楼层
一年前曾经仔细看过,看来还需再次认真拜读,谢谢mathe
---------------------------------------

207#  发表于 2008-12-23 00:31 | 只看该作者
强帖留名。花了我近1个小时,累啊。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-8 20:29:55 | 显示全部楼层
miller-rabin算法判素。10^10内,素数基选(2,3,35543)就可以了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-8 21:49:59 | 显示全部楼层
抛开miller-rabin不提,尝试筛法。

$sqrt(N/2)<7071067812$

$sqrt(7071067812)<84090$

2到84090之间的素数有8198个。

把这些素数记下。

1到7071067812的最大素数间隔大概是350吧?

为了保险起见,当它是400好了。

在查询的数前面铺一块400米长的地毯。

根据地毯的位置对8198个素数的余数,就知道这些素数会把地毯上的哪些地方挖掉。

再看看查询的数前面最近的没挖掉的地方,就是所要求的最大素数。

其实和分段筛法的原理是一样的。

说白了也就是在一段长度为400的地毯上用8198个素数作筛法。

筛好了结果就出来了。

用了8198次mod运算和少量的加法运算。

而平均情况下,查询的数前面12米的地方就是答案。

用miller-rabin判6个奇数即可。

所以如果miller-rabin判一个数可以在1366次运算之内完成,那么还是miller-rabin快。

而实际上用3组素数基一共只需100次运算左右吧?

所以如果会miller-rabin的话,还是用miller-rabin的好,比筛法快10倍。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-2 04:19 , Processed in 0.045601 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表