From df317e083727bf23d76323c0912f881933e420cf Mon Sep 17 00:00:00 2001 From: filifa Date: Tue, 7 Oct 2025 18:06:24 -0400 Subject: [PATCH] refactor updating prime powers --- internal/lib/sieve/primeOmega.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/lib/sieve/primeOmega.go b/internal/lib/sieve/primeOmega.go index 3b5fade..d1a1579 100644 --- a/internal/lib/sieve/primeOmega.go +++ b/internal/lib/sieve/primeOmega.go @@ -16,7 +16,7 @@ along with this program. If not, see . */ package sieve -func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint, multiplicity bool) { +func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint) { for q := p; ; q *= p { // omega(a*b) = omega(a) + omega(b) if gcd(a,b) = 1 for i := 2 * q; i < n; i += q { @@ -28,10 +28,12 @@ func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint, multiplicity bool) if p*q >= n { break } + } +} - if multiplicity { - sieve[p*q] = 1 + sieve[q] - } +func updatePowers(sieve []uint, p uint, n uint) { + for q := p; p*q < n; q *= p { + sieve[p*q] = 1 + sieve[q] } } @@ -54,7 +56,11 @@ func PrimeOmega(n uint, multiplicity bool, buflen uint) chan uint { } sieve[i] = 1 - primeOmegaUpdateMultiples(sieve, i, n, multiplicity) + if multiplicity { + updatePowers(sieve, i, n) + } + + primeOmegaUpdateMultiples(sieve, i, n) ch <- sieve[i] } }()