math.big #
Constants #
const zero_int = Integer{
digits: []u32{len: 0}
signum: 0
is_const: true
}
const one_int = Integer{
digits: [u32(1)]
signum: 1
is_const: true
}
const two_int = Integer{
digits: [u32(2)]
signum: 1
is_const: true
}
const three_int = Integer{
digits: [u32(3)]
signum: 1
is_const: true
}
fn bit_length #
fn bit_length(a Integer) int
bit_length returns the number of bits needed to represent the absolute value of the integer a.
fn integer_from_bytes #
fn integer_from_bytes(input []u8, config IntegerConfig) Integer
integer_from_bytes creates a new big.Integer
from the given byte array. By default, positive integers are assumed. If you want a negative integer, use in the following manner: value := big.integer_from_bytes(bytes, signum: -1)
fn integer_from_i64 #
fn integer_from_i64(value i64) Integer
integer_from_i64 creates a new big.Integer
from the given i64 value.
fn integer_from_int #
fn integer_from_int(value int) Integer
integer_from_int creates a new big.Integer
from the given int value.
fn integer_from_radix #
fn integer_from_radix(all_characters string, radix u32) !Integer
integer_from_radix creates a new big.Integer
from the given string and radix.
fn integer_from_string #
fn integer_from_string(characters string) !Integer
integer_from_string creates a new big.Integer
from the decimal digits specified in the given string. For other bases, use big.integer_from_radix
instead.
fn integer_from_u32 #
fn integer_from_u32(value u32) Integer
integer_from_u32 creates a new big.Integer
from the given u32 value.
fn integer_from_u64 #
fn integer_from_u64(value u64) Integer
integer_from_u64 creates a new big.Integer
from the given u64 value.
struct Integer #
struct Integer {
digits []u32
pub:
signum int
is_const bool
}
big.Integer
It has the following properties: 1. Every "digit" is an integer in the range [0, 2^32). 2. The signum can be one of three values: -1, 0, +1 for negative, zero, and positive values, respectively. 3. There should be no leading zeros in the digit array. 4. The digits are stored in little endian format, that is, the digits with a lower positional value (towards the right when represented as a string) have a lower index, and vice versa.
fn (Integer) abs #
fn (a Integer) abs() Integer
abs returns the absolute value of the integer a
.
fn (Integer) neg #
fn (a Integer) neg() Integer
neg returns the result of negation of the integer a
.
fn (Integer) + #
fn (augend Integer) + (addend Integer) Integer
- returns the sum of the integers
augend
andaddend
.
fn (Integer) - #
fn (minuend Integer) - (subtrahend Integer) Integer
- returns the difference of the integers
minuend
andsubtrahend
fn (Integer) * #
fn (multiplicand Integer) * (multiplier Integer) Integer
- returns the product of the integers
multiplicand
andmultiplier
.
fn (Integer) div_mod #
fn (dividend Integer) div_mod(divisor Integer) (Integer, Integer)
div_mod returns the quotient and remainder from the division of the integers dividend
divided by divisor
.
WARNING: this method will panic if divisor == 0
. Refer to div_mod_checked for a safer version.
fn (Integer) div_mod_checked #
fn (dividend Integer) div_mod_checked(divisor Integer) !(Integer, Integer)
div_mod_checked returns the quotient and remainder from the division of the integers dividend
divided by divisor
. An error is returned if divisor == 0
.
fn (Integer) / #
fn (dividend Integer) / (divisor Integer) Integer
/ returns the quotient of dividend
divided by divisor
.
WARNING: this method will panic if divisor == 0
. For a division method that returns a Result refer to div_checked
.
fn (Integer) % #
fn (dividend Integer) % (divisor Integer) Integer
% returns the remainder of dividend
divided by divisor
.
WARNING: this method will panic if divisor == 0
. For a modular division method that returns a Result refer to mod_checked
.
fn (Integer) div_checked #
fn (dividend Integer) div_checked(divisor Integer) !Integer
div_checked returns the quotient of dividend
divided by divisor
or an error if divisor == 0
.
fn (Integer) mod_checked #
fn (dividend Integer) mod_checked(divisor Integer) !Integer
mod_checked returns the remainder of dividend
divided by divisor
or an error if divisor == 0
.
fn (Integer) pow #
fn (base Integer) pow(exponent u32) Integer
pow returns the integer base
raised to the power of the u32 exponent
.
fn (Integer) mod_pow #
fn (base Integer) mod_pow(exponent u32, modulus Integer) Integer
mod_pow returns the integer base
raised to the power of the u32 exponent
modulo the integer modulus
.
fn (Integer) big_mod_pow #
fn (base Integer) big_mod_pow(exponent Integer, modulus Integer) !Integer
big_mod_pow returns the integer base
raised to the power of the integer exponent
modulo the integer modulus
.
fn (Integer) inc #
fn (mut a Integer) inc()
inc increments a
by 1 in place.
fn (Integer) dec #
fn (mut a Integer) dec()
dec decrements a
by 1 in place.
fn (Integer) == #
fn (a Integer) == (b Integer) bool
== returns true
if the integers a
and b
are equal in value and sign.
fn (Integer) abs_cmp #
fn (a Integer) abs_cmp(b Integer) int
abs_cmp returns the result of comparing the magnitudes of the integers a
and b
. It returns a negative int if |a| < |b|
, 0 if |a| == |b|
, and a positive int if |a| > |b|
.
fn (Integer) < #
fn (a Integer) < (b Integer) bool
< returns true
if the integer a
is less than b
.
fn (Integer) get_bit #
fn (a Integer) get_bit(i u32) bool
get_bit checks whether the bit at the given index is set.
fn (Integer) set_bit #
fn (mut a Integer) set_bit(i u32, value bool)
set_bit sets the bit at the given index to the given value.
fn (Integer) bitwise_or #
fn (a Integer) bitwise_or(b Integer) Integer
bitwise_or returns the "bitwise or" of the integers |a|
and |b|
.
Note: both operands are treated as absolute values.
fn (Integer) bitwise_and #
fn (a Integer) bitwise_and(b Integer) Integer
bitwise_and returns the "bitwise and" of the integers |a|
and |b|
.
Note: both operands are treated as absolute values.
fn (Integer) bitwise_not #
fn (a Integer) bitwise_not() Integer
bitwise_not returns the "bitwise not" of the integer |a|
.
Note: the integer is treated as an absolute value.
fn (Integer) bitwise_xor #
fn (a Integer) bitwise_xor(b Integer) Integer
bitwise_xor returns the "bitwise exclusive or" of the integers |a|
and |b|
.
Note: both operands are treated as absolute values.
fn (Integer) lshift #
fn (a Integer) lshift(amount u32) Integer
lshift returns the integer a
shifted left by amount
bits.
fn (Integer) left_shift #
fn (a Integer) left_shift(amount u32) Integer
left_shift returns the integer a
shifted left by amount
bits.
fn (Integer) rshift #
fn (a Integer) rshift(amount u32) Integer
rshift returns the integer a
shifted right by amount
bits.
fn (Integer) right_shift #
fn (a Integer) right_shift(amount u32) Integer
right_shift returns the integer a
shifted right by amount
bits.
fn (Integer) binary_str #
fn (integer Integer) binary_str() string
binary_str returns the binary string representation of the integer a
.
fn (Integer) bin_str #
fn (integer Integer) bin_str() string
bin_str returns the binary string representation of the integer a
.
fn (Integer) hex #
fn (integer Integer) hex() string
hex returns the hexadecimal string representation of the integer a
.
fn (Integer) radix_str #
fn (integer Integer) radix_str(radix u32) string
radix_str returns the string representation of the integer a
in the specified radix.
fn (Integer) str #
fn (integer Integer) str() string
str returns the decimal string representation of the integer a
.
fn (Integer) int #
fn (a Integer) int() int
int returns the integer value of the integer a
.
Note: This may cause loss of precision.
fn (Integer) bytes #
fn (a Integer) bytes() ([]u8, int)
bytes returns the a byte representation of the integer a, along with the signum int.
Note: The byte array returned is in big endian order.
fn (Integer) factorial #
fn (a Integer) factorial() Integer
factorial returns the factorial of the integer a
.
fn (Integer) isqrt #
fn (a Integer) isqrt() Integer
isqrt returns the closest integer square root of the integer a
.
WARNING: this method will panic if a < 0
. Refer to isqrt_checked for a safer version.
fn (Integer) isqrt_checked #
fn (a Integer) isqrt_checked() !Integer
isqrt returns the closest integer square root of the integer a
. An error is returned if a < 0
.
fn (Integer) gcd #
fn (a Integer) gcd(b Integer) Integer
gcd returns the greatest common divisor of the two integers a
and b
.
fn (Integer) gcd_binary #
fn (a Integer) gcd_binary(b Integer) Integer
gcd_binary returns the greatest common divisor of the two integers a
and b
. Note that gcd_binary is faster than gcd_euclid, for large integers (over 8 bytes long). Inspired by the 2013-christmas-special by D. Lemire & R. Corderoy https://en.algorithmica.org/hpc/analyzing-performance/gcd/ For more information, refer to the Wikipedia article: https://en.wikipedia.org/wiki/Binary_GCD_algorithm Discussion and further information: https://lemire.me/blog/2013/12/26/fastest-way-to-compute-the-greatest-common-divisor/
fn (Integer) gcd_euclid #
fn (a Integer) gcd_euclid(b Integer) Integer
gcd_euclid returns the greatest common divisor of the two integers a
and b
. Note that gcd_euclid is faster than gcd_binary, for very-small-integers up to 8-byte/u64.
fn (Integer) mod_inverse #
fn (a Integer) mod_inverse(n Integer) !Integer
mod_inverse calculates the multiplicative inverse of the integer a
in the ring ℤ/nℤ
. Therefore, the return value x
satisfies a * x == 1 (mod m)
. An error is returned if a
and n
are not relatively prime, i.e. gcd(a, n) != 1
or if n <= 1
fn (Integer) is_odd #
fn (x Integer) is_odd() bool
is_odd returns true if the integer x
is odd, therefore an integer of the form 2k + 1
. An input of 0 returns false.
fn (Integer) is_power_of_2 #
fn (x Integer) is_power_of_2() bool
is_power_of_2 returns true when the integer x
satisfies 2^n
, where n >= 0
fn (Integer) bit_len #
fn (x Integer) bit_len() int
bit_len returns the number of bits required to represent the integer a
.
struct IntegerConfig #
struct IntegerConfig {
signum int = 1
}
- Constants
- fn bit_length
- fn integer_from_bytes
- fn integer_from_i64
- fn integer_from_int
- fn integer_from_radix
- fn integer_from_string
- fn integer_from_u32
- fn integer_from_u64
- struct Integer
- fn abs
- fn neg
- fn +
- fn -
- fn *
- fn div_mod
- fn div_mod_checked
- fn /
- fn %
- fn div_checked
- fn mod_checked
- fn pow
- fn mod_pow
- fn big_mod_pow
- fn inc
- fn dec
- fn ==
- fn abs_cmp
- fn <
- fn get_bit
- fn set_bit
- fn bitwise_or
- fn bitwise_and
- fn bitwise_not
- fn bitwise_xor
- fn lshift
- fn left_shift
- fn rshift
- fn right_shift
- fn binary_str
- fn bin_str
- fn hex
- fn radix_str
- fn str
- fn int
- fn bytes
- fn factorial
- fn isqrt
- fn isqrt_checked
- fn gcd
- fn gcd_binary
- fn gcd_euclid
- fn mod_inverse
- fn is_odd
- fn is_power_of_2
- fn bit_len
- struct IntegerConfig