| 
注册时间2008-11-26最后登录1970-1-1威望 星金币 枚贡献 分经验 点鲜花 朵魅力 点上传 次下载 次积分149502在线时间 小时 
 | 
 
| 
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册  复制代码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,真的是越来越发现自己很无知!
 这段取模的置换的代码,是不是只对梅森数有效?
 
 
 
 
 | 
 |