package main
import (
"fmt"
"math"
"time"
)
func max(s []int) (max int) {
max = s[0]
for _, v := range s {
if v > max {
max = v
}
}
return
}
func isPrime(n int) bool {
if n == 2 || n == 3 || n == 5 {
return true
}
if n%6 != 1 && n%6 != 5 {
return false
}
rt := int(math.Sqrt(float64(n)))
for i := 5; i <= rt; i += 6 {
if n%i == 0 || n%(i+2) == 0 {
return false
}
}
return true
}
func getNextPrime(n int) int {
var result int
for {
if isPrime(n + 1) {
result += n
break
} else {
n++
}
}
return result + 1
}
func run(x int) []int {
var prime int = 2
primeFactor := []int{}
for isPrime(x) == false {
if x%prime == 0 {
x /= prime
primeFactor = append(primeFactor, prime)
}
if x%prime != 0 {
prime = getNextPrime(prime)
}
}
if isPrime(x) == true {
primeFactor = append(primeFactor, x)
}
return primeFactor
}
func main() {
bT := time.Now()
a := run(600851475143)
b := max(a)
fmt.Println(b)
fmt.Println(a)
eT := time.Since(bT)
fmt.Println("\n------------------------")
fmt.Println("Run time:", eT)
}
6857
[71 839 1471 6857]
------------------------
Run time: 1.027487ms
|