- 注册时间
- 2021-11-19
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 9609
- 在线时间
- 小时
|
- Clear["Global`*"];(*mathematica11.2,win7(64bit)Clear all variables*)
- (*子函数,用来把p=4k+1型的素数表达成两个正整数的平方和*)
- f[p_]:=Module[{a,x},
- If[Mod[p,4]!=1,Print["素数必须是4k+1型"];Return[False]];
- a=NestWhile[(1+#)&,2,JacobiSymbol[#,p]!=-1&];(*依次从2 3 4 5 6...当中找到p的第一个非剩余,为找x^2=-1(mod p)打基础*)
- x=PowerMod[a,(p-1)/4,p];(*x^2=(a^((p-1)/4))^2=a^((p-1)/2)=-1(mod p)*)
- NestWhile[{#[[2]](*new被除数*),Mod[#[[1]](*old被除数*),#[[2]](*old除数*)](*new除数*)}&,{p,x}(*初始被除数与除数*),#[[1]]^2>=p&(*被除数最终必须<根号p,除数是小于被除数的*)](*不断辗转相除法,找到小于根号p的两个余数*)
- ]
- f[10^200+357]
复制代码
求解结果
{873429951469709641509232442226217264348765117359661005804455107522305\
9534652741558693062858574717874, \
4869498124813486982231377956355473573990401367667605534476012902371537\
410710789858816644285044662191} |
|