Skip to main content

Elliptic Curve Factorization

Данный модуль предназначен для нахождения всех делителей числа (факторизация, разложение на простые множители). В качестве метода факторизации используется алгоритм, предложенный Хендриком Ленстрой в 1987 году.

Использование через скрипт

Склонируйте репозиторий, и установите зависимости используя:

git clone https://github.com/NikitaYurasov/ECF.git
cd ECF
poetry install
  • pip
git clone https://github.com/NikitaYurasov/ECF.git
cd ECF
pip install -r requirements.txt

И выполните следующую команду:

python pyecf.py -n 9671406556917033397649407  # или любое другое число

Использование как пакет

Установите пакет используя pip (или любой другой менеджер зависимостей)

pip install pyecf

Внутри проекта использование может выглядеть так:

from pyecf import LenstraAlgorithm

n = 9671406556917033397649407
algo = LenstraAlgorithm(n)
factors = algo.factorize() # factors - отсортированный список делителей

Описание алгоритма

Пусть требуется найти делить числа . Считаем, что у числа существует делитель (). Сгенерируем тройку чисел для случайной эллиптической кривой над , где и с условием, что кривая не сингулярна (). Случайной точкой на кривой выберем .

Пусть также задано число , обозначающее степень, в которое будем возводить начальную точку : , где и -- некоторые целые положительные числа.

Следующим шагом выполняется возведение в степень на выбранной кривой:

, где операция + определена по следующему алгоритму:

Алгоритм сложения

Требуется сложить две точки и :

  1. Если , то ; если , то .

  2. Иначе, пусть

    a. Найти . Если , то -- делитель . Конец алгоритма.

    b. Если , то НОД дает Конец алгоритма.

    c. Если , тогда . Требуется найти .

    • Если , -- делитель, конец алгоритма.
    • В противном случае, если , считаем, что , конец алгоритма.
    • Если , то и .

Стоит заметить, что если в ходе алгоритма получается сингулярная кривая, выбор кривой необходимо повторить. Если в ходе алгоритма делитель не нашелся, алгоритм стоит запустить еще раз.

Нахождение всех делителей числа

  1. Пусть заданы два массива: пустой массив для простых делителей и массив с составными делителями. На первом шаге, во втором массиве находится число .

  2. По всем числам из массива составных делителей пока он не пустой:

    • Берем первое число;
    • Проверяем на простоту (тест Миллера-Рабина): если число простое, заносим его в массив простых чисел, и удаляем первое число из массива составных чисел;
    • Если не простое, проверяем на четность: если число четное, в список простых делителей заносим 2, в список составных - в конец;
    • Если не четное, аналогично проверяем делимость на 3;
    • В противном случае используем алгоритм Ленстры для поиска делителя, пока он не будет найден. Когда делитель найден, добавляем его и в список составных делителей в конец.
  3. Результатом алгоритма будут все числа из списка простых делителей.

Скорость работы

Время работы данного алгоритма зависит не от самого факторизуемого числа, а то размера наименьшего делителя.

Время работы: Время работы

Release files for pyecf 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyecf 0.1.3
File Size Uploaded
pyecf-0.1.3.tar.gz 11.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyecf 0.1.3
File Interpreter ABI Platform
pyecf-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 23.7 kB

Release files / pyecf-0.1.3.tar.gz

Download URL pyecf-0.1.3.tar.gz
Size 11.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0d071ce0f620865afc2196e298babf5fdad6bc1430bb3ced98d7cfa64165830d
BLAKE2b-256 checksum
How to use checksums
7db02f58783fe7c003ad89da5d6b5c8e435db1102e903b062fc7b0c76b5cc1ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.9.6 Darwin/23.1.0

Release files / pyecf-0.1.3-py3-none-any.whl

Download URL pyecf-0.1.3-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8da617be507d334d2e10b1822a421c5358043ab14b5da65bbe752a3068eeed6e
BLAKE2b-256 checksum
How to use checksums
5853be98c1faf9d77d24bfb464f8620360de73151ccc58c7e75d587f6d8de8d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.9.6 Darwin/23.1.0

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page