Metadata-Version: 2.4
Name: numthy
Version: 0.2.0
Summary: Computational number theory. Pure Python. Zero dependencies. Unreasonably fast.
Author-email: Ini Oguntola <ioguntol@gmail.com>
License: MIT License
Project-URL: Homepage, https://github.com/ini/numthy
Project-URL: Documentation, https://github.com/ini/numthy/blob/main/API.md
Project-URL: Repository, https://github.com/ini/numthy
Keywords: number-theory,mathematics,primes,factorization,cryptography
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Mathematics
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.md
Dynamic: license-file

<h1 align="center" style="margin-top: 24px;">
  <img src="https://i.imgur.com/IjaDdYO.png" alt="NumThy" width="256">
</h1>

Computational number theory. Pure Python. Zero dependencies. Unreasonably fast.

## Installation

```bash
pip install numthy
```

Or just drop [`numthy.py`](https://raw.githubusercontent.com/ini/numthy/main/numthy.py) into your project.

## Quick Start

```python
import numthy as nt

# Primality
nt.is_prime(2**89 - 1)  # True

# Factorization (SIQS handles 50+ digits)
nt.prime_factors(2**128 + 1)  # (59649589127497217, 5704689200685129054721)

# Prime counting
nt.count_primes(10**9)  # 50847534

# Discrete log
nt.discrete_log(1000, 3, 65537)  # 50921 (i.e., 1000 ≡ 3^50921 mod 65537)

# Diophantine equations
# Solve 2x² + 3xy - 3y² + 7x - 10y - 24 = 0
solutions = nt.conic(2, 3, -3, 7, -10, -24)
next(solutions)  # (8, 10)
next(solutions)  # (376, -174)
next(solutions)  # (17304, 25218)
```

## Demo

Try NumThy in the browser: [ini.github.io/numthy/demo](https://ini.github.io/numthy/demo)

## Documentation

See [API.md](API.md) for the full reference.

## Under The Hood

One file, with everything implemented from scratch. Simple API, with heavy-duty algorithms under the hood:

* Extra-strong variant of the Baillie-PSW primality test
* Lagarias-Miller-Odlyzko (LMO) algorithm for prime counting, generalized to sums over primes of any arbitrary completely multiplicative function
* Two-stage Lenstra's ECM factorization with Montgomery curves and Suyama parametrization
* Self-initializing quadratic sieve (SIQS) with triple-large-prime variation
* Cantor-Zassenhaus → Hensel lifting → Chinese Remainder Theorem pipeline for finding modular roots of polynomials
* Adleman-Manders-Miller algorithm for general n-th roots over finite fields
* General solver for all binary quadratic Diophantine equations (ax² + bxy + cy² + dx + ey + f = 0)
* Lenstra–Lenstra–Lovász lattice basis reduction algorithm with automatic precision escalation
* Jochemsz-May generalization of Coppersmith's method for multivariate polynomials with any number of variables

## Requirements

Python 3.10+

That's it.

## License

[MIT](LICENSE.md)
