17 assert(upperbounds - lowerbounds < RAND_MAX);
18 return lowerbounds + std::rand() % (upperbounds - lowerbounds + 1);
40 for (
int i = 1; i <= number; ++i) {
52 for (
uint64 mask = 0x8000000000000000; mask; mask >>= 1) {
53 if (mask & exponent) {
69 int64 y1 = 0, y2 = 1, tmp;
71 tmp = y1 - (module / number) * y2;
74 tmp = module % number;
87 for (;
powerModulo(number, order, module) != 1; ++order)
CPP_UTILITIES_EXPORT int factorial(int number)
Returns the factorial of the given number.
int64 inverseModulo(int64 number, int64 module)
Computes the inverse of number modulo module.
std::int64_t int64
signed 64-bit integer
std::uint64_t uint64
unsigned 64-bit integer
CPP_UTILITIES_EXPORT int random(int lowerbounds, int upperbounds)
Returns a pseudo random number between lowerbounds and upperbounds.
uint64 orderModulo(const uint64 number, const uint64 module)
Computes the order of number modulo module.
uint64 powerModulo(const uint64 base, const uint64 exponent, const uint64 module)
Computes base power exponent modulo module.
CPP_UTILITIES_EXPORT int digitsum(int number, int base=10)
Returns the digitsum of the given number using the specified base.