d = [beta[i]*k[i+1] - beta[i+1]*k[i] for i inrange(len(beta)-2)] m = [] for i in d: for j in d: if i!=j: m.append(gcd(i,j)) m1 = [] for i in m: for j in m: if i!=j: m1.append(gcd(i,j)) km = min(m1) for i inrange(2,2^22): if km%i == 0and km//i < 2**528and km//i % 65536 == 0: m = km//i
求出m之后 由于k_1和m有公因数,得除掉 求出a
1 2 3 4 5
d = gcd(k[0],m) k1 = k[0]//d b1 = beta[0]//d m1 = m // d a = b1*inverse(k1,m1)%m
类似的求出b,c
1 2 3
d = gcd(y[0],m) b = (y[1]//d*inverse(y[0]//d,m//d) - a*(x[0]+x[1]))%m c = (x[1]-a*x[0]^2 - b*x[0])%m