Ultra-fast prime lookup using memory-mapped odd-only sieve
Project description
lookprime
lookprime is a high-performance prime number library for Python built around a memory-mapped, odd-only, bitset sieve.
It is designed for: - extremely fast primality tests - fast prime counting and enumeration - repeated queries across processes - large limits with minimal RAM overhead - CLI benchmarking and inspection
The core idea:
👉 build a prime sieve once, store it on disk, then reuse it via
mmap with near-zero startup cost.
Features
Core performance
- Odd-only sieve (½ the memory of full sieve)
- Bitset representation (1 bit per odd number)
- Memory-mapped cache (
mmap) for zero-copy sharing int.from_bytes(...).bit_count()for fast counting- Auto-growing cache when needed
- Safe for multi-process use (read-only)
Python API
isprime(n)isprime_many(iterable)primerange(a, b)randprime(a, b)primepi(n)prime(n)(nth prime, 1-indexed)prevprime(n)nextprime(n)primes(n)(firstnprimes)primes_up_to(n)factorint(n)cache_info()clear_cache()
CLI
lookprime infolookprime buildlookprime benchmarklookprime isprime <n>lookprime factor <n>lookprime clear-cache
Installation
pip install lookprime
Python ≥ 3.9 required.
Quick Start (Python)
import lookprime
lookprime.isprime(97) # True
lookprime.primepi(1_000_000) # 78498
lookprime.primes_up_to(50) # [2, 3, 5, 7, 11, ...]
lookprime.factorint(123456) # {2: 6, 3: 1, 643: 1}
Bulk checks:
lookprime.isprime_many([2, 3, 4, 5, 10**9 + 7])
How the Cache Works
-
Sieve files are stored in a platform-appropriate cache directory:
- Linux:
~/.cache/lookprime - macOS:
~/Library/Caches/lookprime - Windows:
%LOCALAPPDATA%\lookprime\Cache
- Linux:
-
Each sieve is stored as:
lookprime_mask_<limit>.lpm -
Files are memory-mapped (
mmap) and shared across processes -
Rebuilding happens only if needed
To inspect cache state:
lookprime.cache_info()
To delete all cached sieves:
lookprime.clear_cache()
or from CLI:
lookprime clear-cache
CLI Usage
Show system and cache info
lookprime info
Build a sieve explicitly
lookprime build --limit 100000000
Benchmark lookup speed
lookprime benchmark
Options:
lookprime benchmark \
--limit 100000000 \
--duration 1.0 \
--iterations 25 \
--chunk 65536
Environment override:
export LOOKPRIME_CHUNK=65536
lookprime benchmark
Primality from CLI
lookprime isprime 104729
Factor integers from CLI
lookprime factor 123456
Performance Notes
isprime(n)is O(1) after cache loadprimepi(n)uses bitset population countprime(n)andprimes(n)use fast bit scanning- Cache memory is shared between processes
- No Python objects are created per lookup
Threading & Multiprocessing
- The sieve is read-only
- Safe to open in multiple processes
- Each process memory-maps its own view
- No locks required
License
MIT 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 lookprime-0.2.3.tar.gz.
File metadata
- Download URL: lookprime-0.2.3.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a8800ee1849d1ca00ff7e9295e0ef48adeedf0e71e76e42cf49f6ed1ee550309
|
|
| MD5 |
0de32bbc940e48aff6cadae3443a6287
|
|
| BLAKE2b-256 |
643913db3ce2b75b0578d263f802ae5529113ea1833f94f122abec305912a4e6
|
File details
Details for the file lookprime-0.2.3-py3-none-any.whl.
File metadata
- Download URL: lookprime-0.2.3-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
577ba9c949e64b829100aec7733f413695aac1050d3d6b991c88c72b4637bd0d
|
|
| MD5 |
a3a83c472c48e1a3ad9be673c636a08e
|
|
| BLAKE2b-256 |
65dd202c85653cdc87b1b3c6083bd56f648faf174d329a1d117b8b522230c449
|