46 lines
974 B
Go
46 lines
974 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
"rcu"
|
|
)
|
|
|
|
func magicConstant(n int) int {
|
|
return (n*n + 1) * n / 2
|
|
}
|
|
|
|
var ss = []string{
|
|
"\u2070", "\u00b9", "\u00b2", "\u00b3", "\u2074",
|
|
"\u2075", "\u2076", "\u2077", "\u2078", "\u2079",
|
|
}
|
|
|
|
func superscript(n int) string {
|
|
if n < 10 {
|
|
return ss[n]
|
|
}
|
|
if n < 20 {
|
|
return ss[1] + ss[n-10]
|
|
}
|
|
return ss[2] + ss[0]
|
|
}
|
|
|
|
func main() {
|
|
fmt.Println("First 20 magic constants:")
|
|
for n := 3; n <= 22; n++ {
|
|
fmt.Printf("%5d ", magicConstant(n))
|
|
if (n-2)%10 == 0 {
|
|
fmt.Println()
|
|
}
|
|
}
|
|
|
|
fmt.Println("\n1,000th magic constant:", rcu.Commatize(magicConstant(1002)))
|
|
|
|
fmt.Println("\nSmallest order magic square with a constant greater than:")
|
|
for i := 1; i <= 20; i++ {
|
|
goal := math.Pow(10, float64(i))
|
|
order := int(math.Cbrt(goal*2)) + 1
|
|
fmt.Printf("10%-2s : %9s\n", superscript(i), rcu.Commatize(order))
|
|
}
|
|
}
|