interesting:
divide 0x3b050b7264187e2bcf8b2d50f5feb7 to 2**10
this is divisirs of 1024:
dviList =[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
this code get quotient exact at divisors. Maybe if divide to 2**90 will be too, quotints will be smaler the original priv not in all range, but in levels of divisors
0x3b050b7264187e2bcf8b2d50f5feb8
0xd1fffffffffffffffffffffffffffffef5237ff67ea62c7722e585724e20bf07
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x33a46a0417956e665599c7a6d73f56 i !!!! like divisors : 64
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x2c43c895cb125ea0dba861fcb87fff i !!!! like divisors : 4
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x24e327277e8f4edb61b6fc5299c0a8 i !!!! like divisors : 512
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x1d8285b9320c3f15e7c596a87b0151 i !!!! like divisors : 32
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x1621e44ae5892f506dd430fe5c41fa i !!!! like divisors : 2
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0xec142dc99061f8af3e2cb543d82a3 i !!!! like divisors : 256
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x760a16e4c830fc579f165aa1ec34c i !!!! like divisors : 16
input:
0x3fd3508fd30f7360566859e9b66ed35e2
y 0x3f5 i !!!! like divisors : 1
N = 115792089237316195423570985008687907852837564279074904382605163141518161494337
def inv(v):
return pow(v, N-2, N)
def divnum(a, b):
return (a * inv(b)) % N
# Зaдaeм знaчeния
dviList =[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
dvi = 512
dd= 1024
x = 0x3b050b7264187e2bcf8b2d50f5feb7 - 1024 -1 -2 -4 -8 -16 -32 -64 - 128 -512 -1024# -1 -2 -4 - 8
y = 0x3b050b7264187e2bcf8b2d50f5feb7 -1024 -1 -2 -4 - 8 -16 -32 -64 -128 -512 - 1024#-1 -2 -4 - 8# Пpимep знaчeния y
# Bычиcляeм X
i = 0
while y >= 2**110 and i <= 2**100:
#y = y - i
#x = x - i
#dvi = dvi + i
X = divnum(x,(dd))
new_y = ((y - i - (X*dvi%N)%N )% N)%N
i = i +1
if new_y <= 2**190:
print("input:")
print(hex(y))
print("y", hex((new_y%N)%N),i)
another property,what if substruct 1 from x and y , result will not be <= 2**190, it is because imposible divide more. So need stop use this point, get last good redult <= and divide again...
0x3b050b7264187e2bcf8b2d50f5feb7 - 1024 -1 -2 -4 -8 -16 -32 -64 - 128 -512 -1024 -1 no result <= 2**190, but:
0x3b050b7264187e2bcf8b2d50f5feb7 - 1024 -1 -2 -4 -8 -16 -32 -64 - 128 -512 -1024 -1 -2 -4 - 8 -16 -32 -64 -128 - 256 -512 - 1024 -1-2 good results <= 2**190 back:
new situation, and after I add full cycle results <= 2**190 back again
N = 115792089237316195423570985008687907852837564279074904382605163141518161494337
def inv(v):
return pow(v, N-2, N)
def divnum(a, b):
return (a * inv(b)) % N
# Зaдaeм знaчeния
dviList =[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
dvi = 512
dd= 1024
x = 0x3b050b7264187e2bcf8b2d50f5feb7 - 1024 -1 -2 -4 -8 -16 -32 -64 - 128 -512 -1024 -1 -2 -4 - 8 -16 -32 -64 -128 - 256 -512 - 1024 -1-2-4
y = 0x3b050b7264187e2bcf8b2d50f5feb7 -1024 -1 -2 -4 - 8 -16 -32 -64 -128 -512 - 1024-1 -2 -4 - 8 -16 -32 -64 -128 - 256 -512 - 1024 -1 -2 -4# Пpимep знaчeния y
# Bычиcляeм X
i = 0
while y >= 2**110 and i <= 2**100:
#y = y - i
#x = x - i
#dvi = dvi + i
X = divnum(x,(dd))
new_y = ((y - i - (X*dvi%N)%N )% N)%N
i = i +1
if new_y <= 2**190:
print("input:")
print(hex(y))
print("y", hex((new_y%N)%N),i)
dvi = 256
dd= 512
x = 0x3b050b7264187e2bcf8b2d50f5feb8 -1 -2 -4 - 8 - 16 - 32 -64 -128 -256 - 512 - 1024 -1 # this <= 2**190
and this not <= 2**190:
x = 0x3b050b7264187e2bcf8b2d50f5feb8 -1 -2 -4 - 8 - 16 - 32 -64 -128 -256 - 512 - 1024