21 inline bool is(
const uint64_t& num) {
22 if (num == 1)
return false;
25 auto root =
static_cast<uint64_t
>(std::sqrt(num)) + 1;
28 for (
size_t x = 2; x <= root; ++x) {
44 template <
typename T = u
int64_t>
inline void next(T& num) {
46 if (num % 2 == 0) num++;
64 inline uint64_t
raise(uint64_t value, uint64_t exp,
const uint64_t& mod) {
74 if (exp & 1) ret = (ret*value) % mod;
78 value = (value*value) % mod;
93 inline std::pair<uint64_t, uint64_t>
generate() {
94 auto q =
static_cast<uint32_t
>(std::rand());
99 auto p = (
static_cast<uint64_t
>(q) * 2) + 1;
The namespace for prime number related operations.
Definition prime.h:14
bool is(const uint64_t &num)
Checks if any given number is prime.
Definition prime.h:21
std::pair< uint64_t, uint64_t > generate()
Generates a prime number.
Definition prime.h:93
void next(T &num)
Find the next prime greater than the provided number.
Definition prime.h:44
uint64_t raise(uint64_t value, uint64_t exp, const uint64_t &mod)
A O(logn) raise operation that works within modulus to prevent overflow.
Definition prime.h:64