Remove Primes function, move factor calculations to separate directory

voroskoi
Oct 19, 2021, 7:19 PM
VTLT4FADK627SZPBLCDCKUOOUPQNA3ZLJGHKNWWGUENWHCPZIHSQC

Dependencies

Change contents

  • edit in snippets/primes/primes_test.go at line 33
    [3.1221][3.1221:1358]()
    func TestPrimes(t *testing.T) {
    is := is.New(t)
    for _, tc := range primeCases {
    is.Equal(tc.expected, primes.Primes(tc.input))
    }
    }
  • edit in snippets/primes/primes_test.go at line 47
    [2.185][3.1497:1589](),[3.1497][3.1497:1589]()
    func BenchmarkPrimes(b *testing.B) {
    for i := 0; i < b.N; i++ {
    primes.Primes(1e6)
    }
    }
  • replacement in snippets/primes/primes.go at line 1
    [3.1695][3.1696:1769]()
    // Package primes is for calculating primes using sieve of Eratosthenes.
    [3.1695]
    [3.1769]
    // Package primes deals with prime numbers.
  • edit in snippets/primes/primes.go at line 5
    [3.1794][3.1794:1801]()
    "fmt"
  • edit in snippets/primes/primes.go at line 8
    [3.1804][3.1804:2629]()
    const max = int(10e5)
    // 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
    }
    func Primes(limit int) []int {
    sieve := make([]bool, limit+1)
    out := []int{}
    for p := 2; p <= limit; p++ {
    if !sieve[p] {
    out = append(out, p)
    for i := p * p; i <= limit; i += p {
    sieve[i] = true
    }
    }
    }
    return out
    }
  • file addition: go.mod (----------)
    [3.9]
    module primes
    go 1.17
    require github.com/matryer/is v1.4.0
  • file addition: factors (d--r------)
    [3.9]
  • file addition: factors.go (----------)
    [0.158]
    // 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
    }