Increasing gaps between consecutive Niven numbers: Difference between revisions
Content added Content deleted
m (added whitespace.) |
(Added Go) |
||
Line 32: | Line 32: | ||
:* [https://cs.uwaterloo.ca/journals/JIS/VOL6/Doyon/doyon.pdf (PDF) version of the (above) article by Doyon]. |
:* [https://cs.uwaterloo.ca/journals/JIS/VOL6/Doyon/doyon.pdf (PDF) version of the (above) article by Doyon]. |
||
<br><br> |
<br><br> |
||
=={{header|Go}}== |
|||
This reuses code from the [[https://rosettacode.org/wiki/Harshad_or_Niven_series#Go Harshad or Niven series]] task though converted to use 'uint64' rather than 'int' in case anyone is running Go on a 32-bit platform. |
|||
<lang go>package main |
|||
import "fmt" |
|||
type is func() uint64 |
|||
func newSum() is { |
|||
var ms is |
|||
ms = func() uint64 { |
|||
ms = newSum() |
|||
return ms() |
|||
} |
|||
var msd, d uint64 |
|||
return func() uint64 { |
|||
if d < 9 { |
|||
d++ |
|||
} else { |
|||
d = 0 |
|||
msd = ms() |
|||
} |
|||
return msd + d |
|||
} |
|||
} |
|||
func newHarshard() is { |
|||
i := uint64(0) |
|||
sum := newSum() |
|||
return func() uint64 { |
|||
for i++; i%sum() != 0; i++ { |
|||
} |
|||
return i |
|||
} |
|||
} |
|||
func commatize(n uint64) string { |
|||
s := fmt.Sprintf("%d", n) |
|||
le := len(s) |
|||
for i := le - 3; i >= 1; i -= 3 { |
|||
s = s[0:i] + "," + s[i:] |
|||
} |
|||
return s |
|||
} |
|||
func main() { |
|||
fmt.Println("Gap Index of gap Starting Niven") |
|||
fmt.Println("=== ============= ==============") |
|||
h := newHarshard() |
|||
pg := uint64(0) // previous highest gap |
|||
pn := h() // previous Niven number |
|||
for i, n := uint64(1), h(); n <= 20e9; i, n = i+1, h() { |
|||
g := n - pn |
|||
if g > pg { |
|||
fmt.Printf("%3d %13s %14s\n", g, commatize(i), commatize(pn)) |
|||
pg = g |
|||
} |
|||
pn = n |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
Gap Index of gap Starting Niven |
|||
=== ============= ============== |
|||
1 1 1 |
|||
2 10 10 |
|||
6 11 12 |
|||
7 26 63 |
|||
8 28 72 |
|||
10 32 90 |
|||
12 83 288 |
|||
14 102 378 |
|||
18 143 558 |
|||
23 561 2,889 |
|||
32 716 3,784 |
|||
36 1,118 6,480 |
|||
44 2,948 19,872 |
|||
45 4,194 28,971 |
|||
54 5,439 38,772 |
|||
60 33,494 297,864 |
|||
66 51,544 478,764 |
|||
72 61,588 589,860 |
|||
88 94,748 989,867 |
|||
90 265,336 2,879,865 |
|||
99 800,054 9,898,956 |
|||
108 3,750,017 49,989,744 |
|||
126 6,292,149 88,996,914 |
|||
135 44,194,186 689,988,915 |
|||
144 55,065,654 879,987,906 |
|||
150 61,074,615 989,888,823 |
|||
153 179,838,772 2,998,895,823 |
|||
192 399,977,785 6,998,899,824 |
|||
201 497,993,710 8,889,999,624 |
|||
234 502,602,764 8,988,988,866 |
|||
258 547,594,831 9,879,997,824 |
|||
276 1,039,028,518 18,879,988,824 |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |