mathematica 发表于 2019-3-13 16:32:19

https://en.m.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm

把mathe的链接发到这边

hujunhua 发表于 2019-3-14 10:44:53

你不是推崇穷举法么?
直接列出模的平方剩余表,从中找呗。计算量也不大,至少是多项式时间的。

mathematica 发表于 2019-3-14 11:54:15

hujunhua 发表于 2019-3-14 10:44
你不是推崇穷举法么?
直接列出模的平方剩余表,从中找呗。计算量也不大,至少是多项式时间的。

大前提:穷举法有效的时候推荐穷举法!
穷举法没效果,还推荐啥?
给你一个一百位的大素数,你怎么计算这个二次同余方程的解?

mathematica 发表于 2019-3-15 12:48:48

mathematica 发表于 2019-3-13 15:13
看算法数论,这本书没提到求原根!

Clear["Global`*"];(*Clear all variables*)
(*算法数论,有限域的开平方算法,附录*)
FiniteSqrt:=Module[{beta,s,t,e,h,b},
    If==-1,Return];
    (*找到非剩余*)
    beta=2;While!=-1,beta=beta+1];
    (*p-1=2^s*t*)
    s=0;t=p-1;While==0,s=s+1;p=p/2];
    e=0;
    Do,p];
      (*个人觉得这个IF下面应该增加break*)
      If!=1,e=e+2^i;Break[]],
      {i,1,s-1,1}
    ];
    h=Mod,p];
    b=Mod*PowerMod,p];
    Return
]

FiniteSqrt
FiniteSqrt
FiniteSqrt


按照这个,我写了一个程序!
页: 1 [2]
查看完整版本: 同余方程x^2=a(mod p)如何求解