factors.go
// Package factors deals with factors.
package factors
import (
"fmt"
)
const MAX = 100_000
// Sieve holds the factors for a given number.
type Sieve map[int][]int
var mysieve = make(Sieve, MAX)
func genSieve(n int) {
for i := 1; i <= n; i++ {
for j := i; j <= n; j += i {
mysieve[j] = append(mysieve[j], i)
}
}
}
// ListPrimes returns the primes below n.
func ListPrimes(n int) ([]int, error) {
if n > MAX && n < 1 {
return nil, fmt.Errorf("%d is too high or low, max: %d, min: 1", n, MAX)
}
genSieve(n)
var primes []int
for i := 2; i < n; i++ {
if len(mysieve[i]) == 2 {
primes = append(primes, i)
}
}
return primes, nil
}