diff --git a/internal/lib/sieve/radical.go b/internal/lib/sieve/radical.go index e8bb00d..6804630 100644 --- a/internal/lib/sieve/radical.go +++ b/internal/lib/sieve/radical.go @@ -54,7 +54,12 @@ func Radical(n uint, buflen uint) chan uint { } sieve[i] = i - radicalUpdateMultiples(sieve, i, n) + for j := i; i*j < n; j *= i { + // rad(p^k) = rad(p) + sieve[i*j] = sieve[i] + } + + updateMultiples(sieve, i, n) ch <- sieve[i] } }()