Computational number theory. Pure Python. Zero dependencies. Unreasonably fast.
Project description
Computational number theory. Pure Python. Zero dependencies. Unreasonably fast.
Installation
pip install numthy
Or just drop numthy.py into your project.
Quick Start
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
Documentation
See 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file numthy-0.2.0.tar.gz.
File metadata
- Download URL: numthy-0.2.0.tar.gz
- Upload date:
- Size: 109.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddf1104d507c27025b4fb29d1c0ebca3699659122713b85dcdb5b6be3cca06c7
|
|
| MD5 |
a0fcc92fdceec9efddd87429332af959
|
|
| BLAKE2b-256 |
580ff8cfc321a7247361b11f48a5838bd3ca422eadcffed9fae33cb8f7ef7fd4
|
File details
Details for the file numthy-0.2.0-py3-none-any.whl.
File metadata
- Download URL: numthy-0.2.0-py3-none-any.whl
- Upload date:
- Size: 66.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
71004cdb84fb5f96bf0fefe9282c771894399fb2159d286a6256bffa2ba9fa0c
|
|
| MD5 |
b146df0c71f157c94dd0272f0a8f2315
|
|
| BLAKE2b-256 |
6279b7478ace39c073119c7fb79a98acd5af49eb3b4976e816251f7a5c60b9ab
|