Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Атака Винера
- d_cr = int(0.485 * numerical_approx(pow(n, 1/4)))
- # print d_cr
- a = e / n
- cf = a.continued_fraction()
- # print cf
- dl = len(cf)
- t = cf.convergents()
- # print t
- k = []
- for i in range(1, len(t)):
- k.append(numerator(t[i]))
- # print k
- d = []
- for i in range(1, len(t)):
- d.append(denominator(t[i]))
- # print d
- i = 1
- while denominator(t[i]) < d_cr^2:
- f = (e * denominator(t[i]) - 1)/numerator(t[i])
- pol = x^2 - ((n - f) + 1) * x + n
- rt = pol.roots()
- if rt[0][0] in ZZ or rt[1][0] in ZZ:
- if rt[0][0] * rt[1][0] == n:
- d = denominator(t[i])
- print d
- break
- i += 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement