59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"rcu"
|
|
)
|
|
|
|
func main() {
|
|
limit := 1000000
|
|
m := 63
|
|
c := rcu.PrimeSieve(limit, false)
|
|
n := m*limit + 1
|
|
sumDivs := make([]int, n)
|
|
for i := 1; i < n; i++ {
|
|
for j := i; j < n; j += i {
|
|
sumDivs[j] += i
|
|
}
|
|
}
|
|
s := make([]bool, n) // all false
|
|
for i := 1; i < n; i++ {
|
|
sum := sumDivs[i] - i // proper divs sum
|
|
if sum <= n {
|
|
s[sum] = true
|
|
}
|
|
}
|
|
untouchable := []int{2, 5}
|
|
for n := 6; n <= limit; n += 2 {
|
|
if !s[n] && c[n-1] && c[n-3] {
|
|
untouchable = append(untouchable, n)
|
|
}
|
|
}
|
|
fmt.Println("List of untouchable numbers <= 2,000:")
|
|
count := 0
|
|
for i := 0; untouchable[i] <= 2000; i++ {
|
|
fmt.Printf("%6s", rcu.Commatize(untouchable[i]))
|
|
if (i+1)%10 == 0 {
|
|
fmt.Println()
|
|
}
|
|
count++
|
|
}
|
|
fmt.Printf("\n\n%7s untouchable numbers were found <= 2,000\n", rcu.Commatize(count))
|
|
p := 10
|
|
count = 0
|
|
for _, n := range untouchable {
|
|
count++
|
|
if n > p {
|
|
cc := rcu.Commatize(count - 1)
|
|
cp := rcu.Commatize(p)
|
|
fmt.Printf("%7s untouchable numbers were found <= %9s\n", cc, cp)
|
|
p = p * 10
|
|
if p == limit {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
cu := rcu.Commatize(len(untouchable))
|
|
cl := rcu.Commatize(limit)
|
|
fmt.Printf("%7s untouchable numbers were found <= %s\n", cu, cl)
|
|
}
|