63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func sieve() []bool {
|
|
sv := make([]bool, 2*1e9+9*9 + 1)
|
|
n := 0
|
|
var s [8]int
|
|
for a := 0; a < 2; a++ {
|
|
for b := 0; b < 10; b++ {
|
|
s[0] = a + b
|
|
for c := 0; c < 10; c++ {
|
|
s[1] = s[0] + c
|
|
for d := 0; d < 10; d++ {
|
|
s[2] = s[1] + d
|
|
for e := 0; e < 10; e++ {
|
|
s[3] = s[2] + e
|
|
for f := 0; f < 10; f++ {
|
|
s[4] = s[3] + f
|
|
for g := 0; g < 10; g++ {
|
|
s[5] = s[4] + g
|
|
for h := 0; h < 10; h++ {
|
|
s[6] = s[5] + h
|
|
for i := 0; i < 10; i++ {
|
|
s[7] = s[6] + i
|
|
for j := 0; j < 10; j++ {
|
|
sv[s[7]+j+n] = true
|
|
n++
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return sv
|
|
}
|
|
|
|
func main() {
|
|
st := time.Now()
|
|
sv := sieve()
|
|
count := 0
|
|
fmt.Println("The first 50 self numbers are:")
|
|
for i := 0; i < len(sv); i++ {
|
|
if !sv[i] {
|
|
count++
|
|
if count <= 50 {
|
|
fmt.Printf("%d ", i)
|
|
}
|
|
if count == 1e8 {
|
|
fmt.Println("\n\nThe 100 millionth self number is", i)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
fmt.Println("Took", time.Since(st))
|
|
}
|