exercism/go/prime-factors/prime.go

50 lines
963 B
Go

package prime
import "fmt"
const testVersion = 2
var sieve []int64
var iter int
func Factors(num int64) []int64 {
fmt.Println("Factors Called on ", num)
if num == 1 {
return []int64{}
}
for i := range sieve {
if sieve[i] == num {
// It's a prime already in the sieve
return []int64{num}
}
if num%sieve[i] == 0 {
div := (num / sieve[i])
return append([]int64{sieve[i]}, Factors(div)...)
}
}
// If we're here, we don't have the prime factors for this number
// Add 1 to the highest prime that we have and find the next prime
i := int64(2)
if len(sieve) > 0 {
i = sieve[len(sieve)-1]
}
fmt.Println(" Looking for a new prime starting at ", i)
for ; i <= num; i++ {
isPrime := true
for j := range sieve {
if i%sieve[j] == 0 {
isPrime = false
}
if !isPrime {
break
}
}
if isPrime {
sieve = append(sieve, i)
// New prime in the sieve, try again
return Factors(num)
}
}
return []int64{}
}