Remove Primes function, move factor calculations to separate directory
Dependencies
- [2]
BCVIGM7Nprimes: add ConcurrentSieve - [3]
LZXA7BOKMake sieve much faster - [4]
7OFUWNAIAdd prime searching functions - [5]
MQF53D2Upijul WTF
Change contents
- edit in snippets/primes/primes_test.go at line 33
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
func BenchmarkPrimes(b *testing.B) {for i := 0; i < b.N; i++ {primes.Primes(1e6)}} - replacement in snippets/primes/primes.go at line 1
// Package primes is for calculating primes using sieve of Eratosthenes.// Package primes deals with prime numbers. - edit in snippets/primes/primes.go at line 5
"fmt" - edit in snippets/primes/primes.go at line 8
const max = int(10e5)// Sieve holds the factors for a given number.type Sieve map[int][]intvar 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 []intfor 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 primesgo 1.17require github.com/matryer/is v1.4.0 - file addition: factors[3.9]
- file addition: factors.go[0.158]
// Package factors deals with factors.package factorsimport ("fmt")const MAX = 100_000// Sieve holds the factors for a given number.type Sieve map[int][]intvar 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 []intfor i := 2; i < n; i++ {if len(mysieve[i]) == 2 {primes = append(primes, i)}}return primes, nil}