Rust Number Theory
Project description
flagrs
Parts of my flagmining
library rewritten as CPython extension code in Rust.
Due to some lacking functionality in rust-cpython==0.6.0
it depends on my own
fork of said project.
ZZ
The integers.
n.inv_mod(m) -> r
: Returns $1/n \pmod m$.
Arithmetic Operations
x+y
, x-y
, x*y
: Addition, subtraction, and multiplication.
x//y -> q
, x%y -> r
, divmod(x,y) -> (q,r)
: Euclidean integer division.
x**e
, pow(x,e)
: Exponentiation. e
must be positive.
pow(x,e,m)
: Exponentiation under a modulus. e
can be negative if gcd(x,m) == 1
.
x.__bool__() -> bool
: True
if x != 0
.
n.sqrt() -> (w,r)
: Floored integer square root with remainder. w*w + r == n
.
n.root(d) -> (w,r)
: Floored integer d
th root with remainder. w**d + r == n
.
Sign
-x
: Negation.
abs(x)
: Absolute value.
x.sign() -> s
: The sign of x
(-1, 0, or 1).
Bitwise Operations
x|y
, x&y
, x^y
: Bitwise OR, AND, and XOR.
~x
: Bitwise negation, acting as if the integer had infinite width.
: Equivalent to -x-1
.
x<<i
, x>>i
: Bit shifts (can be negative).
n.nbits() -> c
: Number of bits needed to represent the absolute value of n
.
: Equivalent to n.bit_length()
.
n.weight() -> c
: Number of bits set in the absolute value of n
.
n.truncate(bits, [signed=False])
: Truncate n
to the given number of bits. Negative numbers are treated as if
they're in two's-complement form for the given bit width.
: If signed
is True
the resulting bits will be re-interpreted as a signed
value and so the result might be negative.
n.next_bit() -> b
: Next power-of-two bigger than n
.
Integers also function implicitly as a list of bits:
n[i] -> bool
: Checks bit i
(0-indexed).
n[i:j] -> v
: Returns a number with the bits set in the slice.
: Morally equivalent to (n>>i) % (1<<j-i)
but supports full slice syntax, including negative numbers.
Representation
str(x) -> str
, x.__repr__()
: Number in base-10 as a text string.
x.nbytes() -> l
: Number of bytes needed to represent the number. For positive numbers this is
equivalent to (x.nbits() + 7)//8
. Negative numbers might require an extra
bit (see x.bytes()
).
x.bytes([order='big']) -> bytes
: Interprets the number as base-256 and returns the digits as a bytestring.
: Negative numbers are treated as if they're in two's complement representation
of the minimum bit width that will successfully represent them, so -128
gives b'\x80'
and -129
gives b'\xff\x7f'
.
x.digits(base) -> [d...]
: Yields a list of digits in base base
. The base can be negative, but must have a magnitude of 2 or more.
Factors
n.gcd(m...) -> g
: Returns the GCD of n
with all arguments.
n.egcd(m) -> (g,x,y)
: Extended GCD yielding BeÌzout coefficients. x*n + m*y == g
.
n.lcm(m...) -> m
: Returns the LCM of n
with all arguments.
n.is_prime([reps=25]) -> bool
: Trivial divisors, then Baille-PSW, then $(reps-24)$ sounds of Miller-Rabin.
n.next_prime() -> p
: Returns the next prime larger than n
.
n.make_odd() -> (q,e)
: Returns the odd part and exponent of 2 in n
. 2**e * q == n
n.small_factors([upto=0x100000]) -> (q,[(p,e)...])
: Factors out all primes smaller than upto
.
: Returns the remaining factor q
and a list of primes and their multiplicity.
x.factor_pollard(upto)
: ...
x.factor_fermat(s, e)
: ...
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 Distributions
Built Distributions
File details
Details for the file flagrs-0.1.2-cp39-cp39-manylinux_2_24_x86_64.whl
.
File metadata
- Download URL: flagrs-0.1.2-cp39-cp39-manylinux_2_24_x86_64.whl
- Upload date:
- Size: 391.1 kB
- Tags: CPython 3.9, manylinux: glibc 2.24+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
b384e51012a356ec0d6e10f975a998e6a27ebde63297adb48037ab65d48f92c4
|
|
MD5 |
80c951c15a86bbd7d4dd69c0e0bd4f9b
|
|
BLAKE2b-256 |
887727628d8e9d49502a3352cd2829bca8d523a27abc9b302b74227f4da47916
|
File details
Details for the file flagrs-0.1.2-cp38-cp38-manylinux_2_24_x86_64.whl
.
File metadata
- Download URL: flagrs-0.1.2-cp38-cp38-manylinux_2_24_x86_64.whl
- Upload date:
- Size: 391.1 kB
- Tags: CPython 3.8, manylinux: glibc 2.24+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
8b8299d83ea30c98a30bdb1682cb7133f1e23bb500e9a91b37039a0b35dc1235
|
|
MD5 |
b59389430c07f42ceb0570a2a6b97e89
|
|
BLAKE2b-256 |
27277a39ab043d7c0105b67c4ee86da441ee9360cf9c9b980fc4e42be0a461ae
|
File details
Details for the file flagrs-0.1.2-cp37-cp37m-manylinux_2_24_x86_64.whl
.
File metadata
- Download URL: flagrs-0.1.2-cp37-cp37m-manylinux_2_24_x86_64.whl
- Upload date:
- Size: 391.1 kB
- Tags: CPython 3.7m, manylinux: glibc 2.24+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
4a9171987fd0dbdbea8b7229f768454d4e487e81cb36fd550a335405031200e9
|
|
MD5 |
9e75085730a909262822ffb55d8b56af
|
|
BLAKE2b-256 |
9c6af35f1584acad8b94fc3e713e7aedb1a830c3f0ac7a20b4a338e657f6bb54
|