找回密码
 欢迎注册
查看: 9845|回复: 3

[讨论] 多次生成N以下的随机素数,利用GMP大数库

[复制链接]
发表于 2011-6-15 10:03:56 | 显示全部楼层 |阅读模式

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

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

×
关于随机得到N以下的一个素数,我自己是这么写的
        gmp_randinit_default(state);                   设置随机初始状态
        do
        {
                mpz_urandomm(r, state, N);            得到N以下随机一个数,赋给r
                mpz_nextprime(r, r);                        求得r的下一次素数,赋给r
        }
        while(mpz_cmp(r, N)>=0);                        如果r>N,返回循环重新生成

如果只要得到一个随机素数的话,感觉还可以,不过从实验来看,利用的时间还是比较长的(N是一千比特的数)。而且我是用到很多个随机素数,所以感觉每次都要这么生成,效率不高。

所有求有没有什么算法可以在GMP下实现生成N以下所有素数N[x]。这样我只要从N[x]里面选一个就行。

谢谢各位啊!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-6-17 10:21:35 | 显示全部楼层
难道我的算法是最高效率地???
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-6-17 14:03:00 | 显示全部楼层
不知你的目的具体是什么?
如果是想拿空间换时间,可以建一个大素数缓冲池,用一个剔除一个,低于下限时立即再生成一批。

而具体到每个大随机素数的生成,除了“生成随机整数-->搜索邻近大素数”的思路外,似乎也没有更好的算法,
毕竟素数至今并没有被发现“构造性”的算法,也就是说可通过公式直接确定出素数来,
当前的非确定性算法是比较快的,但基本的逻辑原理是采用“排除法”,不同算法之间的差异主要是“过滤”的强度以及效率间的差别而已。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-26 04:31 , Processed in 0.042489 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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