mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-05 21:24:27 +02:00
Add more missing std::
prefixes
This commit is contained in:
@@ -265,7 +265,7 @@ struct NumberDecomposition {
|
|||||||
// Default construction produces the first value to try, according to Selfridge's parameter selection.
|
// Default construction produces the first value to try, according to Selfridge's parameter selection.
|
||||||
// Calling `successor()` on this repeatedly will produce the sequence of values to try.
|
// Calling `successor()` on this repeatedly will produce the sequence of values to try.
|
||||||
struct LucasDParameter {
|
struct LucasDParameter {
|
||||||
uint64_t mag = 5u;
|
std::uint64_t mag = 5u;
|
||||||
bool pos = true;
|
bool pos = true;
|
||||||
|
|
||||||
friend constexpr int as_int(LucasDParameter p)
|
friend constexpr int as_int(LucasDParameter p)
|
||||||
@@ -280,7 +280,7 @@ struct LucasDParameter {
|
|||||||
// want to use for the Strong Lucas Probable Prime test.
|
// want to use for the Strong Lucas Probable Prime test.
|
||||||
//
|
//
|
||||||
// Precondition: `n` is not a perfect square.
|
// Precondition: `n` is not a perfect square.
|
||||||
[[nodiscard]] consteval LucasDParameter find_first_D_with_jacobi_symbol_neg_one(uint64_t n)
|
[[nodiscard]] consteval LucasDParameter find_first_D_with_jacobi_symbol_neg_one(std::uint64_t n)
|
||||||
{
|
{
|
||||||
LucasDParameter D{};
|
LucasDParameter D{};
|
||||||
while (jacobi_symbol(as_int(D), n) != -1) {
|
while (jacobi_symbol(as_int(D), n) != -1) {
|
||||||
@@ -293,26 +293,26 @@ struct LucasDParameter {
|
|||||||
//
|
//
|
||||||
// The default values give the first element (i.e., k=1) of the sequence.
|
// The default values give the first element (i.e., k=1) of the sequence.
|
||||||
struct LucasSequenceElement {
|
struct LucasSequenceElement {
|
||||||
uint64_t u = 1u;
|
std::uint64_t u = 1u;
|
||||||
uint64_t v = 1u;
|
std::uint64_t v = 1u;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Produce the Lucas element whose index is twice the input element's index.
|
// Produce the Lucas element whose index is twice the input element's index.
|
||||||
[[nodiscard]] consteval LucasSequenceElement double_strong_lucas_index(const LucasSequenceElement& element, uint64_t n,
|
[[nodiscard]] consteval LucasSequenceElement double_strong_lucas_index(const LucasSequenceElement& element,
|
||||||
LucasDParameter D)
|
std::uint64_t n, LucasDParameter D)
|
||||||
{
|
{
|
||||||
const auto& [u, v] = element;
|
const auto& [u, v] = element;
|
||||||
|
|
||||||
uint64_t v_squared = mul_mod(v, v, n);
|
std::uint64_t v_squared = mul_mod(v, v, n);
|
||||||
uint64_t D_u_squared = mul_mod(D.mag, mul_mod(u, u, n), n);
|
std::uint64_t D_u_squared = mul_mod(D.mag, mul_mod(u, u, n), n);
|
||||||
uint64_t new_v = D.pos ? add_mod(v_squared, D_u_squared, n) : sub_mod(v_squared, D_u_squared, n);
|
std::uint64_t new_v = D.pos ? add_mod(v_squared, D_u_squared, n) : sub_mod(v_squared, D_u_squared, n);
|
||||||
new_v = half_mod_odd(new_v, n);
|
new_v = half_mod_odd(new_v, n);
|
||||||
|
|
||||||
return {.u = mul_mod(u, v, n), .v = new_v};
|
return {.u = mul_mod(u, v, n), .v = new_v};
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] consteval LucasSequenceElement increment_strong_lucas_index(const LucasSequenceElement& element,
|
[[nodiscard]] consteval LucasSequenceElement increment_strong_lucas_index(const LucasSequenceElement& element,
|
||||||
uint64_t n, LucasDParameter D)
|
std::uint64_t n, LucasDParameter D)
|
||||||
{
|
{
|
||||||
const auto& [u, v] = element;
|
const auto& [u, v] = element;
|
||||||
|
|
||||||
@@ -325,7 +325,8 @@ struct LucasSequenceElement {
|
|||||||
return {.u = new_u, .v = new_v};
|
return {.u = new_u, .v = new_v};
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] consteval LucasSequenceElement find_strong_lucas_element(uint64_t i, uint64_t n, LucasDParameter D)
|
[[nodiscard]] consteval LucasSequenceElement find_strong_lucas_element(std::uint64_t i, std::uint64_t n,
|
||||||
|
LucasDParameter D)
|
||||||
{
|
{
|
||||||
LucasSequenceElement element{};
|
LucasSequenceElement element{};
|
||||||
|
|
||||||
@@ -350,7 +351,7 @@ struct LucasSequenceElement {
|
|||||||
//
|
//
|
||||||
// Precondition: (n >= 2).
|
// Precondition: (n >= 2).
|
||||||
// Precondition: (n is odd).
|
// Precondition: (n is odd).
|
||||||
[[nodiscard]] consteval bool strong_lucas_probable_prime(uint64_t n)
|
[[nodiscard]] consteval bool strong_lucas_probable_prime(std::uint64_t n)
|
||||||
{
|
{
|
||||||
MP_UNITS_EXPECTS_DEBUG(n >= 2u);
|
MP_UNITS_EXPECTS_DEBUG(n >= 2u);
|
||||||
MP_UNITS_EXPECTS_DEBUG(n % 2u == 1u);
|
MP_UNITS_EXPECTS_DEBUG(n % 2u == 1u);
|
||||||
|
Reference in New Issue
Block a user