Skip to content

Commit 8f6c34b

Browse files
committed
add some constant optimization
1 parent d8890e6 commit 8f6c34b

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

mathematics/prime-counting.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ std::pair<std::vector<int64>, std::vector<int64>> prime_count(int64 n, int64 k,
5656
};
5757
const int64 v = static_cast<int64>(sqrt(n));
5858
std::vector<int64> ssum(v + 1), lsum(v + 1);
59+
std::vector<bool> mark(v + 1);
5960
for (int i = 1; i <= v; ++i) {
6061
ssum[i] = pow_sum(i, k, mod) - 1;
6162
lsum[i] = pow_sum(n / i, k, mod) - 1;
@@ -64,7 +65,11 @@ std::pair<std::vector<int64>, std::vector<int64>> prime_count(int64 n, int64 k,
6465
if (ssum[p] == ssum[p - 1]) continue;
6566
int64 psum = ssum[p - 1], q = p * p, ed = std::min(v, n / q);
6667
int64 pk = pow_mod(p, k, mod);
68+
for (int64 i = q; i <= v; i += q) {
69+
mark[i] = true;
70+
}
6771
for (int i = 1; i <= ed; ++i) {
72+
if (mark[i]) continue;
6873
int64 d = i * p;
6974
if (d <= v) {
7075
lsum[i] = sub_mod(lsum[i], sub_mod(lsum[d], psum, mod) * pk % mod, mod);

0 commit comments

Comments
 (0)