yafu分解n很快就可以得到p,q但是没什么用
仔细观察getloop可以找到像杨辉三角类似的结构
其中x1是其中的奇数项和,y1是其中的偶数项和
实际上最后得到的x1和y1满足
((X+aY)^65536)mod n=(s1 + a*s2)mod n
随后根据a = ((inv_Z1-X)*inv_Y)%n ,得知(s1 + a*s2)mod n就是inv Z1
随后算出Z1,得到X
最后Y =(n+x_add_ay-X)*gmpy2.invert(a,n)%n得到flag
import os
from Crypto.Util.number import *
s1 = 5404548088049249951619519701935576492239293254135836357417714329205323074367876875480850741613547220698045360461761929952847796420174204143917852624050110
s2 = 2110372753170830610718226848526649992911771424441223687775304654852191999130502986109306355582366065947895295520226816523397652918227241733632791793362785
a = 1762039418842677123086894939949574689744108610561557889235294034870342076452734215004689409493802437034960516295735815195656138656970901855976802991519141
p = 115718235064789220654263009993128325569382592506655305434488398268608329541037
q = 115718235064789220654263009993128324769382192706654302434478391267607309966379
n = 13390709926509813526471364597371124446888078365567927211781799241724742352679484983709219580483800891886832613684875066109177882219522305348565532970795023
N = (p-1)*(q-1)
e = 65537
s = (s1+a*s2)%n
d = gmpy2.invert(e,N)
x_add_ay = pow(s,d,n)
print(x_add_ay)
inv_Z1=x_add_ay
Z1 = gmpy2.invert(inv_Z1,n)
inv_2 = gmpy2.invert(2,n)
X = ((Z1+inv_Z1)*inv_2)%n
print(X)
Y =(n+x_add_ay-X)*gmpy2.invert(a,n)%n
print(long_to_bytes(Y))