Comments 6
Для генерации используются не "случайные" точки с эллипсов, а те, которые удовлетворяют требования по "разряжённости", отсутствию повторов и прочее. Для этого берутся точки "перегиба". Если "случайное" число пропустить через sin(допустим генерация круга) меняя любой его разряд, то видно что при приближении к сгенерированному числу функция выдаёт "коленца" - вот в этих точках примерно они и берутся(и этих точек не так и много). Через вольфрам это тоже видно. Числа брал с биткоина. Было любопытно) Не такой уж и рандомный ваш randomize.
Не могли бы вы поподробнее расписать, что у вас на картинке. Не очень интересно разбирать код, чтобы это понять.
на картинке каждый овал это точка эллиптической кривой (X,Y) и множитель на G, т.е. логарифм этой точки. Стрелка показывает на новую точку, которая получается преобразованием этой. Это преобразование и есть монада. Если сделать +1, то будет один цикл, если как в статье, то получится такая вот структура.
На картинке потерялся кусочек с "00.4e 25" -> "00.01 -1" <- "00.19 4a". А это как раз точки с уникальной Y-координатой.
for k in range(1,h):
Pn =63*P
Так как - достаточно написать:
for k in range(1,4)
.
И таких кучек ровно 12.
Обратите внимание, что во всех точках каждого цикла значения y координаты Y одинаковые.
А это всё потому, что 36 = 12 * 3.
Вот рисунок этой кривой над :

Зелёным проведены прямые, на которых лежат точки с равными Y-координатами, таких точек, обычно, три. Две "потерявшихся" точки - (0x00, 0x4e) и (0x00, 0x19).
Это удивительные закономерности, точки эллиптической кривой оказались очень хорошо структурированы.
Вообще, так как в уравнении кривой справа кубика, а кривая - это группа, где, по определению сложения точек, A + B + C == O, то этим 111 точкам, при разбиении их на 12 подмножеств по 9 элементов (с остатком), со "сдвигами" в 63*G (63 == 3*3*7, GCD(111, 63) == 3), просто некуда будет деваться.
А так - в теории чисел сложно найти что-то более структурированное, чем эллиптические кривые.
Изящные монады точек эллиптической кривой