diff --git a/include/SegmentedPiTable.hpp b/include/SegmentedPiTable.hpp index 2f4b4c6f..10bbe384 100644 --- a/include/SegmentedPiTable.hpp +++ b/include/SegmentedPiTable.hpp @@ -18,7 +18,7 @@ /// the SegmentedPiTable are described in more detail in: /// https://github.com/kimwalisch/primecount/blob/master/doc/Easy-Special-Leaves.md /// -/// Copyright (C) 2023 Kim Walisch, +/// Copyright (C) 2024 Kim Walisch, /// /// This file is distributed under the BSD License. See the COPYING /// file in the top level directory. @@ -28,6 +28,7 @@ #define SEGMENTEDPITABLE_HPP #include +#include #include #include #include @@ -78,9 +79,11 @@ class SegmentedPiTable : public BitSieve240 return pi_tiny_[x]; x -= low_; - uint64_t count = pi_[x / 240].count; - uint64_t bits = pi_[x / 240].bits; - uint64_t bitmask = unset_larger_[x % 240]; + uint64_t x_div_240 = fast_div_240(x); + uint64_t x_mod_240 = x - x_div_240 * 240; + uint64_t count = pi_[x_div_240].count; + uint64_t bits = pi_[x_div_240].bits; + uint64_t bitmask = unset_larger_[x_mod_240]; return count + popcnt64(bits & bitmask); }