Задать вопрос
@haqz

Как вычислить правильно в скрипте python?

N порядка 2^256!!!

#формула :

# dd = ((x / a) * b1) / c) * d1

Как сделать что бы из любого x диапазона 2^119-2^120, получиь dd размером не больше 2^60 - 2^70 ??? Тех кто поможет я символически отблагодарю.

#формула :

# dd = ((x / a) * b1) / c) * d1


from random import randint

import random

N =    115792089237316195423570985008687907852837564279074904382605163141518161494337

def inv(v): return pow(v, N-2, N)
def divnum(a, b): return ( (a * inv(b) ) % N )


#x= random.randint(2**119,2**120)

x = 0xb05ef9299a4d346351f33dd336395d
print("x",hex(x))



a = 0x961#

aa = divnum(x,a)

print("aa",hex(aa))


#aa = 0x337fa0776aba96c38b918a1367be52191ed660152236566e06f66da4d43fb700

b1 = 49 #35

bb = aa * b1 % N

# bb = 0xdb6db6db6db6db6db6db6db6db6db6da56e29fef62d8e8f596c5a9994e49bbb7
print("bb", hex(bb))

c1 = 35 

c = divnum(1, c1) 

# c = 0xea0ea0ea0ea0ea0ea0ea0ea0ea0ea0e8e532290d6d0f3369d3f389a550a6a21

print("c",hex(c))

d1 = 1

dd = (divnum(bb,c) * d1)%N

#dd =0x7dfab1f9251293225f1b754db90467


print("dd",hex(dd))

print(hex(x-dd))
  • Вопрос задан
  • 287 просмотров
Подписаться 1 Сложный 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Я так понял, надо подобрать константы a,b,c,d?
Вообще, можно a, b1, c считать равными 1 и менять только d.

Но у вас там умножение и деление по модулю. Так что все очень сложно.

Вообще, ваша задача не имеет решения.

Модуль у вас в вопросе порядка 10^78. А X может быть 10^119-10^120. Если x взять по модулю N, то там может получится вообще любой остаток (потому что 10^120-10^119 = 9*10^119 > N)

А дальше, умножая эти числа на константу, если N простое (а оно должно быть простым, иначе деление по модулю не определено), то можно получить любой остаток до N. Не только до 2^60 - 2^70.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы