找回密码
 欢迎注册
查看: 14037|回复: 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-11-23 16:23 , Processed in 0.024520 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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