59 lines
1.8 KiB
Go
59 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"rcu"
|
|
"sort"
|
|
)
|
|
|
|
func main() {
|
|
const limit = 1000000
|
|
limit2 := int(math.Cbrt(limit))
|
|
primes := rcu.Primes(limit / 6)
|
|
pc := len(primes)
|
|
var sphenic []int
|
|
fmt.Println("Sphenic numbers less than 1,000:")
|
|
for i := 0; i < pc-2; i++ {
|
|
if primes[i] > limit2 {
|
|
break
|
|
}
|
|
for j := i + 1; j < pc-1; j++ {
|
|
prod := primes[i] * primes[j]
|
|
if prod+primes[j+1] >= limit {
|
|
break
|
|
}
|
|
for k := j + 1; k < pc; k++ {
|
|
res := prod * primes[k]
|
|
if res >= limit {
|
|
break
|
|
}
|
|
sphenic = append(sphenic, res)
|
|
}
|
|
}
|
|
}
|
|
sort.Ints(sphenic)
|
|
ix := sort.Search(len(sphenic), func(i int) bool { return sphenic[i] >= 1000 })
|
|
rcu.PrintTable(sphenic[:ix], 15, 3, false)
|
|
fmt.Println("\nSphenic triplets less than 10,000:")
|
|
var triplets [][3]int
|
|
for i := 0; i < len(sphenic)-2; i++ {
|
|
s := sphenic[i]
|
|
if sphenic[i+1] == s+1 && sphenic[i+2] == s+2 {
|
|
triplets = append(triplets, [3]int{s, s + 1, s + 2})
|
|
}
|
|
}
|
|
ix = sort.Search(len(triplets), func(i int) bool { return triplets[i][2] >= 10000 })
|
|
for i := 0; i < ix; i++ {
|
|
fmt.Printf("%4d ", triplets[i])
|
|
if (i+1)%3 == 0 {
|
|
fmt.Println()
|
|
}
|
|
}
|
|
fmt.Printf("\nThere are %s sphenic numbers less than 1,000,000.\n", rcu.Commatize(len(sphenic)))
|
|
fmt.Printf("There are %s sphenic triplets less than 1,000,000.\n", rcu.Commatize(len(triplets)))
|
|
s := sphenic[199999]
|
|
pf := rcu.PrimeFactors(s)
|
|
fmt.Printf("The 200,000th sphenic number is %s (%d*%d*%d).\n", rcu.Commatize(s), pf[0], pf[1], pf[2])
|
|
fmt.Printf("The 5,000th sphenic triplet is %v.\n.", triplets[4999])
|
|
}
|