|
发表于 2023-9-25 22:06:39
|
显示全部楼层
上面的那个数是一个素数。这个例子给出一个强伪素数,它是前46个素数
的强伪素数。可以看出,最后的结果判定为合数,这个简单的程序给出的
判定结果有些过于详细了!
n = 803837457453639491257079614341942108138837688287558145837488917522\
2974273765333652186502336163960045457915042023603208766569966760987284\
0439654082329287387918508691668573282677617710293896977394701670823042\
8687109997439976544144845341155872450633409279022275296229414984230688\
1685404326457534018329786111298960644845216191652872597534901;
m = n - 1; s = 0;
While[Mod[m, 2] == 0, m = m/2; s = s + 1];
Do[t1 = PowerMod[a, m, n]; k = 0;
If[t1 == 1, Print[{a, k, t1, prime}]; Continue[]];
t2 = t1;
While[k < s - 1 && t2 != n - 1, k = k + 1; t2 = Mod[t2*t2, n]];
If[t2 == n - 1, Print[{a, k, t2 - n, prime}], Print[{a, composite}];
Break[]], {a, 2, 100}]
结果如下
{2,1,-1,prime}
{3,0,-1,prime}
{4,0,-1,prime}
{5,0,1,prime}
{6,1,-1,prime}
{7,1,-1,prime}
{8,1,-1,prime}
{9,0,1,prime}
{10,1,-1,prime}
{11,1,-1,prime}
{12,0,1,prime}
{13,1,-1,prime}
{14,composite}
第14个结果显示该数是合数。
我们也可以分解这个合数。
其中的{a,2,100},范围可以由用户自己选择。
郭先强的程序也提供了随机的millerrabin测试,
但是我们并不知道其背后产生的基,所以我发一个
输出结果比较详细的mathematica代码 |
|