def piksl1(y):
r = 0
while y:
if y & 1:
r +=1
y >>= 1
return r
def edin1(n):
b1 = 2
c = 1
while b1 <= n:
c = c*2 % n
if c == 1:
#print ("-u-", n, "-e-",b1, c)
return b1
b1 = n
b1 += 1
return b1
def edin2(n):
p1 = 1
bn = n.bit_length()
c1 = 2**bn
k1 = n
while p1 <= c1:
c = k1 % c1
if c == c1 - 1:
return p1
k1 = k1 + n
p1 +=1
return p1
def edin3(n, b2):
bn = n.bit_length()
q1 = n * 2**bn
q2 = n * (b2)
nn = 0
b1 = 2
c1 = 0
c = 1
while b1 <= 30000:
c = c*2 % q1
#print (b1, c , q2, bn, q1)
if (c-1) == q2:
nn +=1
if nn == 2:
print ("-p-", c1, b1-c1)
return b1
#print ("-up-", n, "-e-",b1, c1)
c1 = b1
#return b1
b1 += 1
return b1
x = 71
y = 103
n = x * y
xy = x + y
print (x,y)
print (n, xy)
bb = edin1(n)
b2 = n % (bb-1)
c = pow(2, bb-1, 145*256)
c1 = c / 145
c2 = c % 145
c3 = pow(2, bb-1, n)
print (c, c1, c2, c3)
print ("-u-", n, "-e-",bb, b2)
a1 = 3
bn = n.bit_length()
#print (n, bn)
ado = 1
A = bn
while a1 <= A-1:
w1 = 2**a1
w2 = n % w1
bn = w2.bit_length()
if w2 > ado:
print ("-u-", w2, bn)
d1 = edin1(w2)
d2 = edin2(w2)
d3 = edin3(w2, d2)
print (d3)
print (d2, bb % d2)
print ("-u-", n, "-e-",d1)
ado = w2
a1 +=1
ZGVmIHBpa3NsMSh5KToJCQkJCQkJCQkKCXIgPSAwCQkJCQkJCQkKCXdoaWxlIHk6CQkJCQkJCQkKCQlpZiB5ICYgMToJCQkJCQkJCgkJCXIgKz0xCQkJCQkJCgkJeSA+Pj0gMQkJCQkJCQkKIAoJcmV0dXJuIHIJCQkJCQkJCQpkZWYgZWRpbjEobik6CQkJCQkJCQkJCgliMSA9IDIgCQkJCQkJCQkKCWMgPSAxCQkJCQkJCQkKCXdoaWxlIGIxIDw9IG46IAkJCQkJCQkJCgkJYyA9IGMqMiAlIG4JCQkJCQkJCgkJaWYgYyA9PSAxOgkJCQkJCQkKCQkJI3ByaW50ICgiLXUtIiwgbiwgIi1lLSIsYjEsIGMpIAkJCQkJCQoJCQlyZXR1cm4gYjEJCQkJCQkKCQkJYjEgID0gbgkJCQkJCQoJCWIxICs9IDEJCQkJCQkJCglyZXR1cm4gYjEJCQkJCQkJCQpkZWYgZWRpbjIobik6CQkJCQkJCQkJCglwMSA9IDEJCQkJCQkJCQoJYm4gPSBuLmJpdF9sZW5ndGgoKQkJCQkJCQkJCgljMSA9IDIqKmJuCQkJCQkJCQkKCWsxID0gbgkJCQkJCQkJCgl3aGlsZSBwMSA8PSBjMToJCQkJCQkJCQoJCWMgPSBrMSAlIGMxCQkJCQkJCQoJCWlmIGMgPT0gYzEgLSAxOgkJCQkJCQkKCQkJcmV0dXJuIHAxCQkJCQkJCgkJazEgPSBrMSArIG4JCQkJCQkJCgkJcDEgKz0xCQkJCQkJCQoJcmV0dXJuIHAxCQkJCQkJCQkKZGVmIGVkaW4zKG4sIGIyKToJCQkJCglibiA9IG4uYml0X2xlbmd0aCgpCQkJCiAKCXExID0gbiAqIDIqKmJuCQkJCglxMiA9IG4gKiAoYjIpCQkJCglubiA9IDAJCQkKCWIxID0gMiAKCWMxID0gMAoJYyA9IDEJCQkKCXdoaWxlIGIxIDw9IDMwMDAwOiAJCQkKIAoJCWMgPSBjKjIgJSBxMQkJCgkJI3ByaW50IChiMSwgYyAsIHEyLCBibiwgcTEpCQkKCQlpZiAoYy0xKSA9PSBxMjoJCQoJCQlubiArPTEJCgkJCWlmIG5uID09IDI6CQoJCQkJcHJpbnQgKCItcC0iLCBjMSwgYjEtYzEpCgkJCQlyZXR1cm4gYjEKIAoJCQkjcHJpbnQgKCItdXAtIiwgbiwgIi1lLSIsYjEsIGMxKSAJCgkJCWMxID0gYjEJCgkJCSNyZXR1cm4gYjEJCgkJYjEgKz0gMQkJCglyZXR1cm4gYjEJCQkKIAogCnggPSA3MQkJCQkJCQkJCQp5ID0gMTAzCQkJCQkJCQkJCiAKbiA9IHggKiB5CQkJCQkJCQkJCnh5ID0geCArIHkJCQkJCQkJCQkKcHJpbnQgKHgseSkJCQkJCQkJCQkKcHJpbnQgKG4sIHh5KQkJCQkJCQkJCQogCmJiID0gZWRpbjEobikJCQkJCQkJCQkKYjIgPSBuICUgKGJiLTEpCQpjID0gcG93KDIsIGJiLTEsIDE0NSoyNTYpCmMxID0gYyAvIDE0NQpjMiA9IGMgJSAxNDUKYzMgPSBwb3coMiwgYmItMSwgbikKcHJpbnQgKGMsIGMxLCBjMiwgYzMpCnByaW50ICgiLXUtIiwgbiwgIi1lLSIsYmIsIGIyKSAJCQkJCQkJCQkKIAphMSA9IDMKIApibiA9IG4uYml0X2xlbmd0aCgpCQkJCQkJCQkJCiNwcmludCAobiwgYm4pCQkJCQkJCQkJCmFkbyA9IDEJCQkJCQkJCQkKQSA9IGJuIAkJCQkJCQkJCQp3aGlsZSBhMSA8PSBBLTE6CQkJCQkJCQkJCgl3MSA9IDIqKmExCQkJCQkJCQkKCXcyID0gbiAlIHcxCQkJCQkJCQkKCWJuID0gdzIuYml0X2xlbmd0aCgpCiAKCWlmIHcyID4gYWRvOgkJCQkJCQkJCgkJcHJpbnQgKCItdS0iLCB3MiwgYm4pCQkJCQkJCQoJCWQxID0gZWRpbjEodzIpCQkJCQkJCQoJCWQyID0gZWRpbjIodzIpCQkJCQkJCQoJCWQzID0gZWRpbjModzIsIGQyKQkJCQkJCQkKCQlwcmludCAoZDMpCQkJCQkJCQoJCXByaW50IChkMiwgYmIgJSBkMikJCQkJCQkJCgkJcHJpbnQgKCItdS0iLCBuLCAiLWUtIixkMSkgCQkJCQkJCQoJCWFkbyA9IHcyCQkJCQkJCQoJYTEgKz0xCQkJCQk=
(71, 103)
(7313, 174)
(18432, 127, 17, 1)
('-u-', 7313, '-e-', 1786, 173)
('-u-', 17, 5)
('-p-', 9, 8)
17
(15, 1)
('-u-', 7313, '-e-', 9)
('-u-', 145, 8)
('-p-', 29, 28)
57
(143, 70)
('-u-', 7313, '-e-', 29)
('-u-', 1169, 11)
('-p-', 250, 249)
499
(911, 875)
('-u-', 7313, '-e-', 250)
('-u-', 3217, 12)
('-p-', 805, 804)
1609
(2959, 1786)
('-u-', 7313, '-e-', 805)