adapt to update sieves for additive functions
This commit is contained in:
@@ -16,12 +16,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package sieve
|
||||
|
||||
func updateMultiples(sieve []uint, p uint, n uint) {
|
||||
func updateMultiples(sieve []uint, p uint, n uint, additive bool) {
|
||||
for q := p; ; q *= p {
|
||||
// sieve[a*b] = sieve[a] * sieve[b] if gcd(a,b) = 1
|
||||
for i := 2 * q; i < n; i += q {
|
||||
if i%(p*q) != 0 {
|
||||
sieve[i] *= sieve[q]
|
||||
if additive {
|
||||
sieve[i] += sieve[q]
|
||||
} else {
|
||||
sieve[i] *= sieve[q]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user