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 - отсортированный список делителей
Описание алгоритма
Пусть требуется найти делить числа . Считаем, что у числа
существует делитель
(
). Сгенерируем тройку чисел
для случайной эллиптической кривой
над
, где
и с условием, что кривая не сингулярна (
). Случайной точкой на кривой выберем
.
Пусть также задано число , обозначающее степень, в которое будем возводить начальную точку
:
, где
и
-- некоторые целые положительные числа.
Следующим шагом выполняется возведение в степень на выбранной кривой:
, где операция + определена по следующему алгоритму:
Алгоритм сложения
Требуется сложить две точки и
:
Стоит заметить, что если в ходе алгоритма получается сингулярная кривая, выбор кривой необходимо повторить. Если в ходе алгоритма делитель не нашелся, алгоритм стоит запустить еще раз.
Нахождение всех делителей числа
-
Пусть заданы два массива: пустой массив для простых делителей и массив с составными делителями. На первом шаге, во втором массиве находится число
.
-
По всем числам из массива составных делителей пока он не пустой:
- Берем первое число;
- Проверяем на простоту (тест Миллера-Рабина): если число простое, заносим его в массив простых чисел, и удаляем первое число из массива составных чисел;
- Если не простое, проверяем на четность: если число четное, в список простых делителей заносим
2, в список составных -
в конец;
- Если не четное, аналогично проверяем делимость на 3;
- В противном случае используем алгоритм Ленстры для поиска делителя, пока он не будет найден.
Когда делитель найден, добавляем его и
в список составных делителей в конец.
-
Результатом алгоритма будут все числа из списка простых делителей.
Скорость работы
Время работы данного алгоритма зависит не от самого факторизуемого числа, а то размера наименьшего делителя.
Время работы:
Metadata
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)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyecf-0.1.3.tar.gz | 11.7 kB | Without provenance | Details for pyecf-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyecf-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for pyecf-0.1.3-py3-none-any.whl |
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
|
Security for pyecf 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.