pyecf


Namepyecf JSON
Version 0.1.3 PyPI version JSON
download
home_page
SummaryElliptic Curve Factorization
upload_time2023-11-23 15:31:20
maintainer
docs_urlNone
authorNikita Yurasov
requires_python>=3.9,<4.0
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Elliptic Curve Factorization
[![](https://img.shields.io/pypi/v/pyecf.svg?style=flat-square)](https://pypi.org/project/pyecf/)

Данный модуль предназначен для нахождения всех делителей числа 
(факторизация, разложение на простые множители). В качестве метода факторизации
используется [алгоритм](https://wstein.org/edu/124/lenstra/lenstra.pdf), предложенный Хендриком Ленстрой в 1987 году.

## Использование через скрипт
Склонируйте репозиторий, и установите зависимости используя:
- [poetry](https://python-poetry.org/docs/#installation)
```shell
git clone https://github.com/NikitaYurasov/ECF.git
cd ECF
poetry install
```
- pip
```shell
git clone https://github.com/NikitaYurasov/ECF.git
cd ECF
pip install -r requirements.txt
```

И выполните следующую команду:
```shell
python pyecf.py -n 9671406556917033397649407  # или любое другое число
```

## Использование как пакет
Установите пакет используя pip (или любой другой менеджер зависимостей)
```shell
pip install pyecf
```
Внутри проекта использование может выглядеть так:
```python
from pyecf import LenstraAlgorithm

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

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

Пусть требуется найти делить числа <a href="https://www.codecogs.com/eqnedit.php?latex=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n" title="n" /></a>. Считаем, что у числа <a href="https://www.codecogs.com/eqnedit.php?latex=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n" title="n" /></a> существует делитель <a href="https://www.codecogs.com/eqnedit.php?latex=d" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d" title="d" /></a> (<a href="https://www.codecogs.com/eqnedit.php?latex=1<d<n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?1<d<n" title="1<d<n" /></a>). Сгенерируем тройку чисел <a href="https://www.codecogs.com/eqnedit.php?latex=a,&space;x_0,&space;y_0" target="_blank"><img src="https://latex.codecogs.com/svg.latex?a,&space;x_0,&space;y_0" title="a, x_0, y_0" /></a> для случайной эллиптической кривой <a href="https://www.codecogs.com/eqnedit.php?latex=y^2=x^3&plus;ax&plus;b" target="_blank"><img src="https://latex.codecogs.com/svg.latex?y^2=x^3&plus;ax&plus;b" title="y^2=x^3+ax+b" /></a> над <a href="https://www.codecogs.com/eqnedit.php?latex=Z/nZ" target="_blank"><img src="https://latex.codecogs.com/svg.latex?Z/nZ" title="Z/nZ" /></a>, где <a href="https://www.codecogs.com/eqnedit.php?latex=b&space;=&space;y_0^2&space;-&space;x_0^3-ax&space;\mod&space;n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?b&space;=&space;y_0^2&space;-&space;x_0^3-ax&space;\mod&space;n" title="b = y_0^2 - x_0^3-ax \mod n" /></a> и с условием, что кривая не сингулярна (<a href="https://www.codecogs.com/eqnedit.php?latex=4a^3&plus;27b^2\ne&space;0\mod&space;n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?4a^3&plus;27b^2\ne&space;0\mod&space;n" title="4a^3+27b^2\ne 0\mod n" /></a>). Случайной точкой на кривой выберем <a href="https://www.codecogs.com/eqnedit.php?latex=P(x&space;:&space;y)&space;=&space;(x_0&space;:&space;y_0)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?P(x&space;:&space;y)&space;=&space;(x_0&space;:&space;y_0)" title="P(x : y) = (x_0 : y_0)" /></a>. 

Пусть также задано число <a href="https://www.codecogs.com/eqnedit.php?latex=k" target="_blank"><img src="https://latex.codecogs.com/svg.latex?k" title="k" /></a>, обозначающее степень, в которое будем возводить начальную точку <a href="https://www.codecogs.com/eqnedit.php?latex=P" target="_blank"><img src="https://latex.codecogs.com/svg.latex?P" title="P" /></a>: <a href="https://www.codecogs.com/eqnedit.php?latex=k=\prod\limits_{r=2}^{\omega}r^m" target="_blank"><img src="https://latex.codecogs.com/svg.latex?k=\prod\limits_{r=2}^{\omega}r^m" title="k=\prod\limits_{r=2}^{\omega}r^m" /></a>, где <a href="https://www.codecogs.com/eqnedit.php?latex=r^m\leq&space;\nu&plus;2\sqrt{\nu}&plus;1" target="_blank"><img src="https://latex.codecogs.com/svg.latex?r^m\leq&space;\nu&plus;2\sqrt{\nu}&plus;1" title="r^m\leq \nu+2\sqrt{\nu}+1" /></a> и <a href="https://www.codecogs.com/eqnedit.php?latex=r" target="_blank"><img src="https://latex.codecogs.com/svg.latex?r" title="r" /></a> -- некоторые целые положительные числа.

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

<a href="https://www.codecogs.com/eqnedit.php?latex=kP&space;=&space;\underbrace{P&plus;&space;P&plus;&space;....&space;&plus;&space;P}_k" target="_blank"><img src="https://latex.codecogs.com/svg.latex?kP&space;=&space;\underbrace{P&plus;&space;P&plus;&space;....&space;&plus;&space;P}_k" title="kP = \underbrace{P+ P+ .... + P}_k" /></a>, где операция + определена по следующему алгоритму:
### Алгоритм сложения
Требуется сложить две точки <a href="https://www.codecogs.com/eqnedit.php?latex=P" target="_blank"><img src="https://latex.codecogs.com/svg.latex?P" title="P" /></a> и <a href="https://www.codecogs.com/eqnedit.php?latex=Q" target="_blank"><img src="https://latex.codecogs.com/svg.latex?Q" title="Q" /></a>: <a href="https://www.codecogs.com/eqnedit.php?latex=R=P&plus;Q" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=P&plus;Q" title="R=P+Q" /></a>

1. Если <a href="https://www.codecogs.com/eqnedit.php?latex=P=\mathcal{O}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?P=\mathcal{O}" title="P=\mathcal{O}" /></a>, то <a href="https://www.codecogs.com/eqnedit.php?latex=R=Q" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=Q" title="R=Q" /></a>; если <a href="https://www.codecogs.com/eqnedit.php?latex=Q=\mathcal{O}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?Q=\mathcal{O}" title="Q=\mathcal{O}" /></a>, то <a href="https://www.codecogs.com/eqnedit.php?latex=R=P" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=P" title="R=P" /></a>.
2. Иначе, пусть <a href="https://www.codecogs.com/eqnedit.php?latex=P=(x_1,&space;y_1),&space;Q=(x_2,&space;y_2)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?P=(x_1,&space;y_1),&space;Q=(x_2,&space;y_2)" title="P=(x_1, y_1), Q=(x_2, y_2)" /></a>

    a. Найти <a href="https://www.codecogs.com/eqnedit.php?latex=d=\gcd(x_1-x_2,&space;n)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=\gcd(x_1-x_2,&space;n)" title="d=\gcd(x_1-x_2, n)" /></a>. Если <a href="https://www.codecogs.com/eqnedit.php?latex=1<d<n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?1<d<n" title="1<d<n" /></a>, то <a href="https://www.codecogs.com/eqnedit.php?latex=d" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d" title="d" /></a> -- делитель <a href="https://www.codecogs.com/eqnedit.php?latex=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n" title="n" /></a>. Конец алгоритма.
    
    b. Если <a href="https://www.codecogs.com/eqnedit.php?latex=d=1" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=1" title="d=1" /></a>, то НОД дает <a href="https://www.codecogs.com/eqnedit.php?latex=(x_1-x_2)^{-1}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?(x_1-x_2)^{-1}" title="(x_1-x_2)^{-1}" /></a>
        <a href="https://www.codecogs.com/eqnedit.php?latex=\lambda=(y_1-y_2)(x_1-x_2)^{-1}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?\lambda=(y_1-y_2)(x_1-x_2)^{-1}" title="\lambda=(y_1-y_2)(x_1-x_2)^{-1}" /></a>
        <a href="https://www.codecogs.com/eqnedit.php?latex=x_3=\lambda^2-x_1-x_2;\:&space;y_3=\lambda(x_1-x_3)-y_1" target="_blank"><img src="https://latex.codecogs.com/svg.latex?x_3=\lambda^2-x_1-x_2;\:&space;y_3=\lambda(x_1-x_3)-y_1" title="x_3=\lambda^2-x_1-x_2;\: y_3=\lambda(x_1-x_3)-y_1" /></a>
        <a href="https://www.codecogs.com/eqnedit.php?latex=R=(x_3,&space;y_3)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=(x_3,&space;y_3)" title="R=(x_3, y_3)" /></a>
        Конец алгоритма.
        
    c. Если <a href="https://www.codecogs.com/eqnedit.php?latex=d=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=n" title="d=n" /></a>, тогда <a href="https://www.codecogs.com/eqnedit.php?latex=x_1=x_2" target="_blank"><img src="https://latex.codecogs.com/svg.latex?x_1=x_2" title="x_1=x_2" /></a>. Требуется найти <a href="https://www.codecogs.com/eqnedit.php?latex=d=\gcd(y_1&space;&plus;&space;y_2,&space;n)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=\gcd(y_1&space;&plus;&space;y_2,&space;n)" title="d=\gcd(y_1 + y_2, n)" /></a>. 
    - Если <a href="https://www.codecogs.com/eqnedit.php?latex=1<d<n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?1<d<n" title="1<d<n" /></a>, <a href="https://www.codecogs.com/eqnedit.php?latex=d" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d" title="d" /></a> -- делитель, конец алгоритма. 
    - В противном случае, если <a href="https://www.codecogs.com/eqnedit.php?latex=d=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=n" title="d=n" /></a>, считаем, что <a href="https://www.codecogs.com/eqnedit.php?latex=R=\mathcal{O}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=\mathcal{O}" title="R=\mathcal{O}" /></a>, конец алгоритма.
    - Если <a href="https://www.codecogs.com/eqnedit.php?latex=d=1" target="_blank"><img src="https://latex.codecogs.com/svg.latex?d=1" title="d=1" /></a>, то <a href="https://www.codecogs.com/eqnedit.php?latex=\lambda=(3x_1^2&plus;a)(y_1&plus;y_2)^{-1}" target="_blank"><img src="https://latex.codecogs.com/svg.latex?\lambda=(3x_1^2&plus;a)(y_1&plus;y_2)^{-1}" title="\lambda=(3x_1^2+a)(y_1+y_2)^{-1}" /></a> и <a href="https://www.codecogs.com/eqnedit.php?latex=R=(\lambda^2-x_1-x_2,&space;\lambda(x_1-x_3)-y_1)" target="_blank"><img src="https://latex.codecogs.com/svg.latex?R=(\lambda^2-x_1-x_2,&space;\lambda(x_1-x_3)-y_1)" title="R=(\lambda^2-x_1-x_2, \lambda(x_1-x_3)-y_1)" /></a>.
    
Стоит заметить, что если в ходе алгоритма получается сингулярная кривая, выбор кривой необходимо повторить. Если в ходе алгоритма делитель не нашелся, алгоритм стоит запустить еще раз.


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

1. Пусть заданы два массива: пустой массив для простых делителей и массив с составными делителями. 
   На первом шаге, во втором массиве находится число <a href="https://www.codecogs.com/eqnedit.php?latex=n" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n" title="n" /></a>.
   
2. По всем числам из массива составных делителей пока он не пустой:
    - Берем первое число;
    - Проверяем на простоту (тест Миллера-Рабина): если число простое, заносим его в массив
    простых чисел, и удаляем первое число из массива составных чисел;
    - Если не простое, проверяем на четность: если число четное, в список простых делителей заносим
    2, в список составных - <a href="https://www.codecogs.com/eqnedit.php?latex=n/2" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n/2" title="n/2" /></a> в конец;
    - Если не четное, аналогично проверяем делимость на 3;
    - В противном случае используем алгоритм Ленстры для поиска делителя, пока он не будет найден. 
      Когда делитель найден, добавляем его и <a href="https://www.codecogs.com/eqnedit.php?latex=n/d" target="_blank"><img src="https://latex.codecogs.com/svg.latex?n/d" title="n/d" /></a> в список составных делителей в конец.
      
3. Результатом алгоритма будут все числа из списка простых делителей.


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

Время работы:
![Время работы](./tests/speedtest_run.jpg)

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "pyecf",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9,<4.0",
    "maintainer_email": "",
    "keywords": "",
    "author": "Nikita Yurasov",
    "author_email": "n.yurasov@yahoo.com",
    "download_url": "https://files.pythonhosted.org/packages/7d/b0/2f58783fe7c003ad89da5d6b5c8e435db1102e903b062fc7b0c76b5cc1ae/pyecf-0.1.3.tar.gz",
    "platform": null,
    "description": "# Elliptic Curve Factorization\n[![](https://img.shields.io/pypi/v/pyecf.svg?style=flat-square)](https://pypi.org/project/pyecf/)\n\n\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0447\u0438\u0441\u043b\u0430 \n(\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\n\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c](https://wstein.org/edu/124/lenstra/lenstra.pdf), \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0425\u0435\u043d\u0434\u0440\u0438\u043a\u043e\u043c \u041b\u0435\u043d\u0441\u0442\u0440\u043e\u0439 \u0432 1987 \u0433\u043e\u0434\u0443.\n\n## \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\n\u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f:\n- [poetry](https://python-poetry.org/docs/#installation)\n```shell\ngit clone https://github.com/NikitaYurasov/ECF.git\ncd ECF\npoetry install\n```\n- pip\n```shell\ngit clone https://github.com/NikitaYurasov/ECF.git\ncd ECF\npip install -r requirements.txt\n```\n\n\u0418 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:\n```shell\npython pyecf.py -n 9671406556917033397649407  # \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\n```\n\n## \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a \u043f\u0430\u043a\u0435\u0442\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f pip (\u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439)\n```shell\npip install pyecf\n```\n\u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:\n```python\nfrom pyecf import LenstraAlgorithm\n\nn = 9671406556917033397649407\nalgo = LenstraAlgorithm(n)\nfactors = algo.factorize() # factors - \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439\n```\n\n## \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\n\n\u041f\u0443\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 <a href=\"https://www.codecogs.com/eqnedit.php?latex=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n\" title=\"n\" /></a>. \u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0443 \u0447\u0438\u0441\u043b\u0430 <a href=\"https://www.codecogs.com/eqnedit.php?latex=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n\" title=\"n\" /></a> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c <a href=\"https://www.codecogs.com/eqnedit.php?latex=d\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d\" title=\"d\" /></a> (<a href=\"https://www.codecogs.com/eqnedit.php?latex=1<d<n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?1<d<n\" title=\"1<d<n\" /></a>). \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u043e\u0439\u043a\u0443 \u0447\u0438\u0441\u0435\u043b <a href=\"https://www.codecogs.com/eqnedit.php?latex=a,&space;x_0,&space;y_0\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?a,&space;x_0,&space;y_0\" title=\"a, x_0, y_0\" /></a> \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 <a href=\"https://www.codecogs.com/eqnedit.php?latex=y^2=x^3&plus;ax&plus;b\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?y^2=x^3&plus;ax&plus;b\" title=\"y^2=x^3+ax+b\" /></a> \u043d\u0430\u0434 <a href=\"https://www.codecogs.com/eqnedit.php?latex=Z/nZ\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?Z/nZ\" title=\"Z/nZ\" /></a>, \u0433\u0434\u0435 <a href=\"https://www.codecogs.com/eqnedit.php?latex=b&space;=&space;y_0^2&space;-&space;x_0^3-ax&space;\\mod&space;n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?b&space;=&space;y_0^2&space;-&space;x_0^3-ax&space;\\mod&space;n\" title=\"b = y_0^2 - x_0^3-ax \\mod n\" /></a> \u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u0447\u0442\u043e \u043a\u0440\u0438\u0432\u0430\u044f \u043d\u0435 \u0441\u0438\u043d\u0433\u0443\u043b\u044f\u0440\u043d\u0430 (<a href=\"https://www.codecogs.com/eqnedit.php?latex=4a^3&plus;27b^2\\ne&space;0\\mod&space;n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?4a^3&plus;27b^2\\ne&space;0\\mod&space;n\" title=\"4a^3+27b^2\\ne 0\\mod n\" /></a>). \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u0432\u044b\u0431\u0435\u0440\u0435\u043c <a href=\"https://www.codecogs.com/eqnedit.php?latex=P(x&space;:&space;y)&space;=&space;(x_0&space;:&space;y_0)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?P(x&space;:&space;y)&space;=&space;(x_0&space;:&space;y_0)\" title=\"P(x : y) = (x_0 : y_0)\" /></a>. \n\n\u041f\u0443\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0447\u0438\u0441\u043b\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=k\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?k\" title=\"k\" /></a>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 <a href=\"https://www.codecogs.com/eqnedit.php?latex=P\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?P\" title=\"P\" /></a>: <a href=\"https://www.codecogs.com/eqnedit.php?latex=k=\\prod\\limits_{r=2}^{\\omega}r^m\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?k=\\prod\\limits_{r=2}^{\\omega}r^m\" title=\"k=\\prod\\limits_{r=2}^{\\omega}r^m\" /></a>, \u0433\u0434\u0435 <a href=\"https://www.codecogs.com/eqnedit.php?latex=r^m\\leq&space;\\nu&plus;2\\sqrt{\\nu}&plus;1\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?r^m\\leq&space;\\nu&plus;2\\sqrt{\\nu}&plus;1\" title=\"r^m\\leq \\nu+2\\sqrt{\\nu}+1\" /></a> \u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=r\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?r\" title=\"r\" /></a> -- \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0446\u0435\u043b\u044b\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430.\n\n\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439:\n\n<a href=\"https://www.codecogs.com/eqnedit.php?latex=kP&space;=&space;\\underbrace{P&plus;&space;P&plus;&space;....&space;&plus;&space;P}_k\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?kP&space;=&space;\\underbrace{P&plus;&space;P&plus;&space;....&space;&plus;&space;P}_k\" title=\"kP = \\underbrace{P+ P+ .... + P}_k\" /></a>, \u0433\u0434\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f + \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443:\n### \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f\n\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=P\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?P\" title=\"P\" /></a> \u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=Q\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?Q\" title=\"Q\" /></a>: <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=P&plus;Q\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=P&plus;Q\" title=\"R=P+Q\" /></a>\n\n1. \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=P=\\mathcal{O}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?P=\\mathcal{O}\" title=\"P=\\mathcal{O}\" /></a>, \u0442\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=Q\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=Q\" title=\"R=Q\" /></a>; \u0435\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=Q=\\mathcal{O}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?Q=\\mathcal{O}\" title=\"Q=\\mathcal{O}\" /></a>, \u0442\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=P\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=P\" title=\"R=P\" /></a>.\n2. \u0418\u043d\u0430\u0447\u0435, \u043f\u0443\u0441\u0442\u044c <a href=\"https://www.codecogs.com/eqnedit.php?latex=P=(x_1,&space;y_1),&space;Q=(x_2,&space;y_2)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?P=(x_1,&space;y_1),&space;Q=(x_2,&space;y_2)\" title=\"P=(x_1, y_1), Q=(x_2, y_2)\" /></a>\n\n    a. \u041d\u0430\u0439\u0442\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=\\gcd(x_1-x_2,&space;n)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=\\gcd(x_1-x_2,&space;n)\" title=\"d=\\gcd(x_1-x_2, n)\" /></a>. \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=1<d<n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?1<d<n\" title=\"1<d<n\" /></a>, \u0442\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=d\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d\" title=\"d\" /></a> -- \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c <a href=\"https://www.codecogs.com/eqnedit.php?latex=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n\" title=\"n\" /></a>. \u041a\u043e\u043d\u0435\u0446 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.\n    \n    b. \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=1\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=1\" title=\"d=1\" /></a>, \u0442\u043e \u041d\u041e\u0414 \u0434\u0430\u0435\u0442 <a href=\"https://www.codecogs.com/eqnedit.php?latex=(x_1-x_2)^{-1}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?(x_1-x_2)^{-1}\" title=\"(x_1-x_2)^{-1}\" /></a>\n        <a href=\"https://www.codecogs.com/eqnedit.php?latex=\\lambda=(y_1-y_2)(x_1-x_2)^{-1}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?\\lambda=(y_1-y_2)(x_1-x_2)^{-1}\" title=\"\\lambda=(y_1-y_2)(x_1-x_2)^{-1}\" /></a>\n        <a href=\"https://www.codecogs.com/eqnedit.php?latex=x_3=\\lambda^2-x_1-x_2;\\:&space;y_3=\\lambda(x_1-x_3)-y_1\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?x_3=\\lambda^2-x_1-x_2;\\:&space;y_3=\\lambda(x_1-x_3)-y_1\" title=\"x_3=\\lambda^2-x_1-x_2;\\: y_3=\\lambda(x_1-x_3)-y_1\" /></a>\n        <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=(x_3,&space;y_3)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=(x_3,&space;y_3)\" title=\"R=(x_3, y_3)\" /></a>\n        \u041a\u043e\u043d\u0435\u0446 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.\n        \n    c. \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=n\" title=\"d=n\" /></a>, \u0442\u043e\u0433\u0434\u0430 <a href=\"https://www.codecogs.com/eqnedit.php?latex=x_1=x_2\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?x_1=x_2\" title=\"x_1=x_2\" /></a>. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=\\gcd(y_1&space;&plus;&space;y_2,&space;n)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=\\gcd(y_1&space;&plus;&space;y_2,&space;n)\" title=\"d=\\gcd(y_1 + y_2, n)\" /></a>. \n    - \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=1<d<n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?1<d<n\" title=\"1<d<n\" /></a>, <a href=\"https://www.codecogs.com/eqnedit.php?latex=d\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d\" title=\"d\" /></a> -- \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u043a\u043e\u043d\u0435\u0446 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \n    - \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=n\" title=\"d=n\" /></a>, \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=\\mathcal{O}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=\\mathcal{O}\" title=\"R=\\mathcal{O}\" /></a>, \u043a\u043e\u043d\u0435\u0446 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.\n    - \u0415\u0441\u043b\u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=d=1\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?d=1\" title=\"d=1\" /></a>, \u0442\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=\\lambda=(3x_1^2&plus;a)(y_1&plus;y_2)^{-1}\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?\\lambda=(3x_1^2&plus;a)(y_1&plus;y_2)^{-1}\" title=\"\\lambda=(3x_1^2+a)(y_1+y_2)^{-1}\" /></a> \u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=R=(\\lambda^2-x_1-x_2,&space;\\lambda(x_1-x_3)-y_1)\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?R=(\\lambda^2-x_1-x_2,&space;\\lambda(x_1-x_3)-y_1)\" title=\"R=(\\lambda^2-x_1-x_2, \\lambda(x_1-x_3)-y_1)\" /></a>.\n    \n\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u0445\u043e\u0434\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0433\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f, \u0432\u044b\u0431\u043e\u0440 \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u0432 \u0445\u043e\u0434\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0435 \u043d\u0430\u0448\u0435\u043b\u0441\u044f, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0449\u0435 \u0440\u0430\u0437.\n\n\n### \u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0447\u0438\u0441\u043b\u0430\n\n1. \u041f\u0443\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u044b \u0434\u0432\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430: \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f\u043c\u0438. \n   \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e <a href=\"https://www.codecogs.com/eqnedit.php?latex=n\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n\" title=\"n\" /></a>.\n   \n2. \u041f\u043e \u0432\u0441\u0435\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439:\n    - \u0411\u0435\u0440\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e;\n    - \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 (\u0442\u0435\u0441\u0442 \u041c\u0438\u043b\u043b\u0435\u0440\u0430-\u0420\u0430\u0431\u0438\u043d\u0430): \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0437\u0430\u043d\u043e\u0441\u0438\u043c \u0435\u0433\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\n    \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b;\n    - \u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430 \u0447\u0435\u0442\u043d\u043e\u0441\u0442\u044c: \u0435\u0441\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u0447\u0435\u0442\u043d\u043e\u0435, \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u043d\u043e\u0441\u0438\u043c\n    2, \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 - <a href=\"https://www.codecogs.com/eqnedit.php?latex=n/2\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n/2\" title=\"n/2\" /></a> \u0432 \u043a\u043e\u043d\u0435\u0446;\n    - \u0415\u0441\u043b\u0438 \u043d\u0435 \u0447\u0435\u0442\u043d\u043e\u0435, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0434\u0435\u043b\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 3;\n    - \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041b\u0435\u043d\u0441\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d. \n      \u041a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043d\u0430\u0439\u0434\u0435\u043d, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0438 <a href=\"https://www.codecogs.com/eqnedit.php?latex=n/d\" target=\"_blank\"><img src=\"https://latex.codecogs.com/svg.latex?n/d\" title=\"n/d\" /></a> \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 \u043a\u043e\u043d\u0435\u0446.\n      \n3. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439.\n\n\n### \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b\n\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0435 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0430 \u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f.\n\n\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b:\n![\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b](./tests/speedtest_run.jpg)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Elliptic Curve Factorization",
    "version": "0.1.3",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5853be98c1faf9d77d24bfb464f8620360de73151ccc58c7e75d587f6d8de8d7",
                "md5": "21c8d41eee78f2b480af6a9e535d5bc6",
                "sha256": "8da617be507d334d2e10b1822a421c5358043ab14b5da65bbe752a3068eeed6e"
            },
            "downloads": -1,
            "filename": "pyecf-0.1.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "21c8d41eee78f2b480af6a9e535d5bc6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9,<4.0",
            "size": 11958,
            "upload_time": "2023-11-23T15:31:19",
            "upload_time_iso_8601": "2023-11-23T15:31:19.281461Z",
            "url": "https://files.pythonhosted.org/packages/58/53/be98c1faf9d77d24bfb464f8620360de73151ccc58c7e75d587f6d8de8d7/pyecf-0.1.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7db02f58783fe7c003ad89da5d6b5c8e435db1102e903b062fc7b0c76b5cc1ae",
                "md5": "3accdb50f5cff7222422944fda8f9906",
                "sha256": "0d071ce0f620865afc2196e298babf5fdad6bc1430bb3ced98d7cfa64165830d"
            },
            "downloads": -1,
            "filename": "pyecf-0.1.3.tar.gz",
            "has_sig": false,
            "md5_digest": "3accdb50f5cff7222422944fda8f9906",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9,<4.0",
            "size": 11705,
            "upload_time": "2023-11-23T15:31:20",
            "upload_time_iso_8601": "2023-11-23T15:31:20.640386Z",
            "url": "https://files.pythonhosted.org/packages/7d/b0/2f58783fe7c003ad89da5d6b5c8e435db1102e903b062fc7b0c76b5cc1ae/pyecf-0.1.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-23 15:31:20",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "pyecf"
}
        
Elapsed time: 0.20711s