mathematica 发表于 2012-7-5 13:46:25

(*Miller-Rabin素性判定的mathematica子函数*)

(*Miller-Rabin素性判定的mathematica子函数*)
Clear["Global`*"];(*Clear all variables*)
MRTest:=(*n0被判定的正奇整数,a0选用的底*)
    Module[{n=n0,
            a=a0,
            m,s,t1,k,t2,out=0(*局部变量*)
         },
            (*先写成n=m*2^s+1的形式,n和m是奇数*)
            m=n-1;
            s=0;
            While==0,m=m/2;s=s+1];
            (*继续判定*)
            (*先检查a^m Mod n是否等于1*)
            t1=PowerMod;
            If[ t1==1,    (*判定a^m Mod n是否等于1*)
                out=1,
                (*如果a^m Mod n不等于1,再不断平方a^m Mod n,
                  看结果是否等于-1,也就是n-1*)
                k=0;
                t2=t1;
                While];
                (*如果可能是符合-1,则返回1,如果不是-1则返回0*)
                If
            ]
            out(*out是返回结果*)
          ]

mathematica 发表于 2012-7-5 13:48:02

http://bbs.emath.ac.cn/viewthread.php?tid=950&highlight=
原帖在这,但是这个不是子函数的形式存在的,所以用起来不好用,
还是这个用子函数存在的比较好用一些!!!!!!!!!

mathematica 发表于 2012-7-5 13:51:42

被管理员清空性删除

mathematica 发表于 2012-7-5 13:55:30

如果子函数的返回结果是1,则可能是素数,
如果子函数的返回结果是0,则一定是合数

mathematica 发表于 2012-7-5 13:58:17

http://hi.baidu.com/白浪

mathematica 发表于 2012-7-6 09:50:11

(*Miller-Rabin素性判定的mathematica子函数*)
Clear["Global`*"];(*Clear all variables*)
MRTest:=(*n0被判定的正奇整数,a0选用的底*)
    Module[{n=n0,
            a=a0,
            m,s,t1,k,t2,out=0(*局部变量*)
         },
            (*先写成n=m*2^s+1的形式,n和m是奇数*)
            m=n-1;
            s=0;
            While==0,m=m/2;s=s+1];
            (*继续判定*)
            (*先检查a^m Mod n是否等于1*)
            t1=PowerMod;
            If[ t1==1,    (*判定a^m Mod n是否等于1*)
                out=1,
                (*如果a^m Mod n不等于1,再不断平方a^m Mod n,
                  看结果是否等于-1,也就是n-1*)
                k=0;
                t2=t1;
                While];
                (*如果可能是符合-1,则返回1,如果不是-1则返回0*)
                If
            ]
            out(*out是返回结果*)
          ]
这个代码是正确的,上面的两个代码都有bug,不过原代码没有bug,
结果被我修正一下出现了bug.
重新贴上正确的!!!!!!!!!!!!!!!!!!!

mathematica 发表于 2012-7-6 09:54:42

多么好的代码呀!!!!!!!!!!!!!!!!!!
赞美我自己一下!!!!!!!!!!!!!!!!

mathematica 发表于 2012-7-6 09:54:59

忍不住再赞美自己一下!!!!!!!

mathematica 发表于 2012-7-6 09:56:50

管理员把这个帖子的1楼和3楼的内容删除了吧,
因为那的帖子的代码有bug.
是只删除内容,不删除主题的删除!

mathematica 发表于 2012-7-6 09:58:12

提示一下,先删除3楼的内容,再删除1楼的内容,
如果先删除1楼的,那么3楼可能变成2楼,
然后错误地把4楼的删除了!
页: [1] 2 3
查看完整版本: (*Miller-Rabin素性判定的mathematica子函数*)