Goodstein Sequence: Difference between revisions

(→‎{{header|Wren}}: Updated in line with Julia example of which it is a translation.)
Line 131:
Term 15 of Goodstein(15): 14063084452070776884879
Term 16 of Goodstein(16): 2771517379996516970665566613559367879596937714713289695169887161862950129194382447127464877388711781205972046374648603545513430106433206876557475731408608398953667881600740852227698037876781766310900319669456854530159244376159780346700931210394158247781113134808720678004134212529413831368888355854503034587880113970541681685966414888841800498150131839091463034162026108960280455620621355407543489960326268155088833218122810217973039385643494213235664908254695964740257569988152978579630435471016976693529875691083071137361386386918409765002837648351746984484967203877495399596876291343126699827442908994036031608979805166915596436929638418152127561722561465793969723556331679336828840983098559789555364076924597258115780567651772009250336359472037679350612341393780002377587368649157608579801815531133644879180066181854487069796160774056572568941004114162614925
</pre>
 
=={{header|Phix}}==
Modified version of the python code from A059934 - tbh, I did not expect to get anywhere near this far using native atoms,
and always planned to write a gmp version, but now that just feels like too much effort for too little gain.
<syntaxhighlight lang="phix">
function digits(atom n, b)
-- least significant first, eg 123,10 -> {3,2,1} or 6,2 -> {0,1,1}
sequence r = {remainder(abs(n),b)}
while n>=b do
n = floor(n/b)
r &= remainder(n,b)
end while
return r
end function
 
function bump(atom n, b)
atom res = 0
for i,d in digits(n,b) do
if d then
res += d*power(b+1,bump(i-1,b))
end if
end for
return res
end function
 
function A059934(atom n, k)
for i=1 to k do
n = bump(n, i+1)-1
end for
return n
end function
 
function goodstein(atom n, maxterms = 10)
sequence res = {n}
while length(res)<maxterms and res[$]!=0 do
res &= A059934(n,length(res))
end while
return res
end function
 
printf(1,"Goodstein(n) sequence (first 10) for values of n from 0 through 7:\n")
for i=0 to 7 do
printf(1,"Goodstein of %d: %v\n",{i,goodstein(i)})
end for
printf(1,"\n")
printf(1,"The Nth term of Goodstein(N) sequence counting from 0, for values of N from 0 through 16:\n")
bool m64 = machine_bits()=64
for i=0 to iff(m64?16:15) do
string ia = iff(i>=iff(m64?13:12)?" (inaccurate)":""),
gs = shorten(sprintf("%d",goodstein(i,i+1)[$]))
printf(1,"Term %d of Goodstein(%d): %s%s\n",{i,i,gs,ia})
end for
</syntaxhighlight>
{{out}} (on 64-bit)
<pre>
Goodstein(n) sequence (first 10) for values of n from 0 through 7:
Goodstein of 0: {0}
Goodstein of 1: {1,0}
Goodstein of 2: {2,2,1,0}
Goodstein of 3: {3,3,3,2,1,0}
Goodstein of 4: {4,26,41,60,83,109,139,173,211,253}
Goodstein of 5: {5,27,255,467,775,1197,1751,2454,3325,4382}
Goodstein of 6: {6,29,257,3125,46655,98039,187243,332147,555551,885775}
Goodstein of 7: {7,30,259,3127,46657,823543,16777215,37665879,77777775,150051213}
 
The Nth term of Goodstein(N) sequence counting from 0, for values of N from 0 through 16:
Term 0 of Goodstein(0): 0
Term 1 of Goodstein(1): 0
Term 2 of Goodstein(2): 1
Term 3 of Goodstein(3): 2
Term 4 of Goodstein(4): 83
Term 5 of Goodstein(5): 1197
Term 6 of Goodstein(6): 187243
Term 7 of Goodstein(7): 37665879
Term 8 of Goodstein(8): 20000000211
Term 9 of Goodstein(9): 855935016215
Term 10 of Goodstein(10): 44580503598539
Term 11 of Goodstein(11): 2120126221988686
Term 12 of Goodstein(12): 155568095557812625
Term 13 of Goodstein(13): 6568408355712901452 (inaccurate)
Term 14 of Goodstein(14): 295147905179358418240 (inaccurate)
Term 15 of Goodstein(15): 14063084452070776847260 (inaccurate)
Term 16 of Goodstein(16): 27715173799965170860...62604488626682848248 (862 digits) (inaccurate)
</pre>
 
7,824

edits