c++实现Tonelli–Shanks算法
c++实现Tonelli–Shanks算法
算法思路:
输入:模p的一个二次剩余n,奇素数p(意味着勒让德符号L(n,p)=1).
输出:整数R,使得R^2≡n(mod p,以下默认)
①从p-1中除去所有因子2,设p-1=q*2^S,其中q是奇数(也就是除去所有因子2的结果)。
②选择一个z,使得勒让德符号L(z,p)= -1(即,z是p的二次非剩余(pow(z, (p - 1) // 2,p)==p-1 )
③令
c≡z^Q.
r≡n^((Q+1)/2 ),
t≡n^Q,
m=S.
④循环
原创
2021-03-23 11:38:29 ·
520 阅读 ·
0 评论