An algorithm that computes modular nested exponents (or towers) efficiently.
Project description
modular-towers
An algorithm that computes modular nested exponents (or towers) efficiently.
🚩 Table of Contents
🗺️ Overview
modular-towers
exports a Python function mod_tower
that takes as input an arbitrarily long sequence of positive integers a₁, a₂, ..., aₙ
and a positive integer m
and computes a₁^(a₂^(···^aₙ)) mod m
efficiently (that is, without computing the value of the nested exponent).
🏳️ Prerequisites
sympy
is currently required as the algorithm uses its totient
function. In the future, a custom totient function will be added so that sympy
is not required, making the module self-contained.
For best performance, install gmpy2
:
$ apt install libgmp-dev libmpfr-dev libmpc-dev # required for gmpy2
$ pip install gmpy2
gmpy2
is not required but it offers more efficient versions of some of Python's built-in math functions. If gmpy2
is not installed, the module simply uses the built-in functions.
🔧 Installation
Installing with pip
is the easiest:
$ pip install modular-towers
A development version can be installed from GitHub
using setuptools
, provided you have sympy
installed already:
$ git clone https://github.com/avivbrook/modular-towers
$ cd modular-towers
$ python setup.py install
💡 Examples
>>> from modular_towers import mod_tower as modtow
>>> modtow([6,5,4,3,2], 1948502738) # 6^(5^(4^(3^2))) mod 1948502738
951546056
To benchmark the main function:
>>> from modular_towers.core.tests import test_core
>>> test_core(list_lengths=(10, 100, 1000), bit_lengths=(16, 128, 1024), mod_bit_lengths=(16, 32, 64))
Project details
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
File details
Details for the file modular-towers-0.1.4.tar.gz
.
File metadata
- Download URL: modular-towers-0.1.4.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d3a4084391c1b6b900d799d10c0a5d01d2fcc182dd553f72b32228ec1253ce9 |
|
MD5 | 5a5881a31bce31cc9e7525f281ded08b |
|
BLAKE2b-256 | 7b94be81496fb2af45538db33ab7e1796ef71e4dcb3cd9decb6b8f10652f0a94 |
File details
Details for the file modular_towers-0.1.4-py3-none-any.whl
.
File metadata
- Download URL: modular_towers-0.1.4-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7dfae9fe954bac8c07285b55c64366b5940b6fd4431b1a596bac3eb3c4b41059 |
|
MD5 | 0ef772a3c2168e2d756f25b2c5a6cd53 |
|
BLAKE2b-256 | cf23124ccd6eba840eb5ca9ff29ec4c00bfc279cb15fa9b6c91c6525c6106a69 |