52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"rcu"
|
|
)
|
|
|
|
func isSquare(n int) bool {
|
|
s := int(math.Sqrt(float64(n)))
|
|
return s*s == n
|
|
}
|
|
|
|
func main() {
|
|
limit := 200000 // say
|
|
d := rcu.PrimeSieve(limit-1, true)
|
|
d[1] = false
|
|
for i := 2; i < limit; i++ {
|
|
if !d[i] {
|
|
continue
|
|
}
|
|
if i%2 == 0 && !isSquare(i) && !isSquare(i/2) {
|
|
d[i] = false
|
|
continue
|
|
}
|
|
sigmaSum := rcu.SumInts(rcu.Divisors(i))
|
|
if rcu.Gcd(sigmaSum, i) != 1 {
|
|
d[i] = false
|
|
}
|
|
}
|
|
|
|
var duff []int
|
|
for i := 1; i < len(d); i++ {
|
|
if d[i] {
|
|
duff = append(duff, i)
|
|
}
|
|
}
|
|
fmt.Println("First 50 Duffinian numbers:")
|
|
rcu.PrintTable(duff[0:50], 10, 3, false)
|
|
|
|
var triplets [][3]int
|
|
for i := 2; i < limit; i++ {
|
|
if d[i] && d[i-1] && d[i-2] {
|
|
triplets = append(triplets, [3]int{i - 2, i - 1, i})
|
|
}
|
|
}
|
|
fmt.Println("\nFirst 56 Duffinian triplets:")
|
|
for i := 0; i < 14; i++ {
|
|
s := fmt.Sprintf("%6v", triplets[i*4:i*4+4])
|
|
fmt.Println(s[1 : len(s)-1])
|
|
}
|
|
}
|