- 注册时间
- 2008-11-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 149507
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
- LucasLehmer[n_] :=
- Module[{Mp, s, k}, Mp = 2^n - 1; s = 4;
- Do[s = Mod[s^2 - 2, Mp], {k, 1, n - 2}];
- If[s == 0, Return[True], Return[False]]]
- LucasLehmer2[p_] :=
- Module[{Mp, s, k}, Mp = 2^p - 1; s = 4;
- Do[s = s^2 - 2; If[s < 0, s += Mp];
- s = BitAnd[s, Mp] + BitShiftRight[s, p];
- If[s >= Mp, s -= Mp], {k, 1, p - 2}];
- If[s == 0, Return[True], Return[False]]]
复制代码
https://baike.baidu.com/item/%E5 ... /3757240?fr=aladdin
卢卡斯-莱默检验法 ,用来判别梅森数是不是素数的算法
s = Mod[s^2 - 2, Mp]
这行代码被替换成了下面的
s = s^2 - 2;
If[s < 0, s += Mp];
s = BitAnd[s, Mp] + BitShiftRight[s, p];
If[s >= Mp, s -= Mp]
这代码替换了一下,速度快了
执行
Timing[LucasLehmer2[86243]]
运行结果
{10.9825, True}
执行
Timing[LucasLehmer[86243]]
运行结果
{49.4367, True}
仅仅换了一下代码,运行效率有五倍之差!!!!!!!!!!
效率低的代码是我写的,效率高的代码是别人写的!
我最近研究mathematica软件与prime95的时候,对比发现判别梅森数方面,mathematica比prime95慢了很多!
我还怀疑prime95,真的是越来越发现自己很无知!
这段取模的置换的代码,是不是只对梅森数有效?
|
|