diff --git a/src/common/Utilities/advstd.h b/src/common/Utilities/advstd.h index 86edcd4445d..187df3c15be 100644 --- a/src/common/Utilities/advstd.h +++ b/src/common/Utilities/advstd.h @@ -112,11 +112,13 @@ namespace advstd template constexpr std::enable_if_t && advstd::is_unsigned_v, std::common_type_t> gcd(T1 m, T2 n) { - if (m < n) - return gcd(n, m); - if (!n) - return m; - return gcd(n, m%n); + while (n) + { + std::swap(m,n); + if (m <= n) + n %= m; + } + return m; } // C++17 std::lcm