add multiplicity flag

This commit is contained in:
filifa 2025-09-20 14:47:39 -04:00
parent 356267a6af
commit d2275cd69f
1 changed files with 9 additions and 2 deletions

View File

@ -23,8 +23,9 @@ import (
) )
var primeOmegaN uint var primeOmegaN uint
var primeOmegaMul bool
func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint) { func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint, multiplicity bool) {
for q := p; ; q *= p { for q := p; ; q *= p {
// omega(a*b) = omega(a) + omega(b) if gcd(a,b) = 1 // omega(a*b) = omega(a) + omega(b) if gcd(a,b) = 1
for i := 2 * q; i < n; i += q { for i := 2 * q; i < n; i += q {
@ -36,6 +37,10 @@ func primeOmegaUpdateMultiples(sieve []uint, p uint, n uint) {
if p*q >= n { if p*q >= n {
break break
} }
if multiplicity {
sieve[p*q] = 1 + sieve[q]
}
} }
} }
@ -54,7 +59,7 @@ func primeOmegaSieve(n uint) chan uint {
} }
sieve[i] = 1 sieve[i] = 1
primeOmegaUpdateMultiples(sieve, i, n) primeOmegaUpdateMultiples(sieve, i, n, primeOmegaMul)
ch <- sieve[i] ch <- sieve[i]
} }
@ -103,4 +108,6 @@ func init() {
primeOmegaCmd.Flags().UintVarP(&primeOmegaN, "limit", "n", 0, "upper limit") primeOmegaCmd.Flags().UintVarP(&primeOmegaN, "limit", "n", 0, "upper limit")
primeOmegaCmd.MarkFlagRequired("limit") primeOmegaCmd.MarkFlagRequired("limit")
primeOmegaCmd.Flags().BoolVarP(&primeOmegaMul, "with-multiplicity", "m", false, "count prime factors with multiplicity")
} }