Super-d numbers: Difference between revisions

→‎{{header|Go}}: Simplified somewhat, about 10% quicker than before.
(Added Fōrmulæ)
(→‎{{header|Go}}: Simplified somewhat, about 10% quicker than before.)
Line 70:
 
=={{header|Go}}==
Simple brute force approach and so not particularly quick - about 2.525 minutes on a Core i7.
<lang go>package main
 
Line 79:
"time"
)
 
func pow(n uint64, exp int) *big.Int {
b := new(big.Int).SetUint64(n)
p := new(big.Int).Set(b)
for i := 2; i <= exp; i++ {
p.Mul(p, b)
}
return p
}
 
func main() {
start := time.Now()
rd := []string{"22", "333", "4444", "55555", "666666", "7777777", "88888888", "999999999"}
for ione := 2; i <= 9; i++ {big.NewInt(1)
pnine := new(big.Int).SetNewInt(b9)
for i := big.NewInt(2); i.Cmp(nine) <= exp0; i++.Add(i, one) {
fmt.Printf("First 10 super-%d numbers:\n", i)
bigiii := bigi.NewIntUint64(int64(i))
k := new(big.Int)
count := 0
inner:
for j := uint64big.NewInt(3); ; j++.Add(j, one) {
k.MulExp(bigij, pow(ji, i)nil)
ix := strings.Index(k.StringMul()i, rd[i-2]k)
ix := strings.Index(k.String(), rd[ii-2])
if ix >= 0 {
count++
Line 121 ⟶ 115:
First 10 super-3 numbers:
261 462 471 481 558 753 1036 1046 1471 1645
found in 01 ms
 
First 10 super-4 numbers:
1168 4972 7423 7752 8431 10267 11317 11487 11549 11680
found in 57 ms
 
First 10 super-5 numbers:
4602 5517 7539 12955 14555 20137 20379 26629 32767 35689
found in 2328 ms
 
First 10 super-6 numbers:
27257 272570 302693 323576 364509 502785 513675 537771 676657 678146
found in 350285 ms
 
First 10 super-7 numbers:
140997 490996 1184321 1259609 1409970 1783166 1886654 1977538 2457756 2714763
found in 17681517 ms
 
First 10 super-8 numbers:
185423 641519 1551728 1854230 6415190 12043464 12147605 15517280 16561735 18542300
found in 1291211117 ms
 
First 10 super-9 numbers:
17546133 32613656 93568867 107225764 109255734 113315082 121251742 175461330 180917907 182557181
found in 151070135616 ms
</pre>
 
9,490

edits