Taxicab numbers: Difference between revisions

added FreeBASIC
(added FreeBASIC)
Line 873:
2006 : {1677646971, [{891, 990}, {99, 1188}]}
</pre>
=={{header|FreeBASIC}}==
<lang freebasic>' version 11-10-2016
' compile with: fbc -s console
 
' Brute force
 
' adopted from "Sorting algorithms/Shell" sort Task
Sub shellsort(s() As String)
' sort from lower bound to the highter bound
Dim As UInteger lb = LBound(s)
Dim As UInteger ub = UBound(s)
Dim As Integer done, i, inc = ub - lb
 
Do
inc = inc / 2.2
If inc < 1 Then inc = 1
 
Do
done = 0
For i = lb To ub - inc
If s(i) > s(i + inc) Then
Swap s(i), s(i + inc)
done = 1
End If
Next
Loop Until done = 0
 
Loop Until inc = 1
 
End Sub
 
' ------=< MAIN >=------
 
Dim As UInteger x, y, count, c, sum
Dim As UInteger cube(1290)
Dim As String result(), str1, str2, str3
Dim As String buf11 = Space(11), buf5 = Space(5)
ReDim result(900000) ' ~1291*1291\2
 
' set up the cubes
Print : Print " Calculate cubes"
For x = 1 To 1290
cube(x) = x*x*x
Next
 
' combine and store
Print : Print " Combine cubes"
For x = 1 To 1290
For y = x To 1290
sum = cube(x)+cube(y)
RSet buf11, Str(sum) : str1 = buf11
RSet buf5, Str(x) : str2 = buf5
RSet buf5, Str(y) : Str3 = buf5
result(count)=buf11 + " = " + str2 + " ^ 3 + " + str3 + " ^ 3"
count = count +1
Next
Next
 
count= count -1
ReDim Preserve result(count) ' trim the array
 
Print : Print " Sort (takes some time)"
shellsort(result()) ' sort
 
Print : Print " Find the Taxicab numbers"
c = 1 ' start at index 1
For x = 0 To count -1
' find sums that match
If Left(result(x), 11) = Left(result(x + 1), 11) Then
result(c) = result(x)
y = x +1
Do ' merge the other solution(s)
result(c) = result(c) + Mid(result(y), 12)
y = y +1
Loop Until Left(result(x), 11) <> Left(result(y), 11)
x = y -1 ' let x point to last match result
c = c +1
End If
Next
 
c = c -1
Print : Print " "; c; " Taxicab numbers found"
ReDim Preserve result(c) ' trim the array again
 
cls
Print : Print " Print first 25 numbers" : Print
For x = 1 To 25
Print result(x)
Next
 
Print : Print " The 2000th to the 2006th" : Print
For x = 2000 To 2006
Print result(x)
Next
 
 
' empty keyboard buffer
While Inkey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
End</lang>
{{out}}
<pre> Print first 25 numbers
 
1729 = 1 ^ 3 + 12 ^ 3 = 9 ^ 3 + 10 ^ 3
4104 = 2 ^ 3 + 16 ^ 3 = 9 ^ 3 + 15 ^ 3
13832 = 2 ^ 3 + 24 ^ 3 = 18 ^ 3 + 20 ^ 3
20683 = 10 ^ 3 + 27 ^ 3 = 19 ^ 3 + 24 ^ 3
32832 = 4 ^ 3 + 32 ^ 3 = 18 ^ 3 + 30 ^ 3
39312 = 2 ^ 3 + 34 ^ 3 = 15 ^ 3 + 33 ^ 3
40033 = 9 ^ 3 + 34 ^ 3 = 16 ^ 3 + 33 ^ 3
46683 = 3 ^ 3 + 36 ^ 3 = 27 ^ 3 + 30 ^ 3
64232 = 17 ^ 3 + 39 ^ 3 = 26 ^ 3 + 36 ^ 3
65728 = 12 ^ 3 + 40 ^ 3 = 31 ^ 3 + 33 ^ 3
110656 = 4 ^ 3 + 48 ^ 3 = 36 ^ 3 + 40 ^ 3
110808 = 6 ^ 3 + 48 ^ 3 = 27 ^ 3 + 45 ^ 3
134379 = 12 ^ 3 + 51 ^ 3 = 38 ^ 3 + 43 ^ 3
149389 = 8 ^ 3 + 53 ^ 3 = 29 ^ 3 + 50 ^ 3
165464 = 20 ^ 3 + 54 ^ 3 = 38 ^ 3 + 48 ^ 3
171288 = 17 ^ 3 + 55 ^ 3 = 24 ^ 3 + 54 ^ 3
195841 = 9 ^ 3 + 58 ^ 3 = 22 ^ 3 + 57 ^ 3
216027 = 3 ^ 3 + 60 ^ 3 = 22 ^ 3 + 59 ^ 3
216125 = 5 ^ 3 + 60 ^ 3 = 45 ^ 3 + 50 ^ 3
262656 = 8 ^ 3 + 64 ^ 3 = 36 ^ 3 + 60 ^ 3
314496 = 4 ^ 3 + 68 ^ 3 = 30 ^ 3 + 66 ^ 3
320264 = 18 ^ 3 + 68 ^ 3 = 32 ^ 3 + 66 ^ 3
327763 = 30 ^ 3 + 67 ^ 3 = 51 ^ 3 + 58 ^ 3
373464 = 6 ^ 3 + 72 ^ 3 = 54 ^ 3 + 60 ^ 3
402597 = 42 ^ 3 + 69 ^ 3 = 56 ^ 3 + 61 ^ 3
 
The 2000th to the 2006th
 
1671816384 = 428 ^ 3 + 1168 ^ 3 = 940 ^ 3 + 944 ^ 3
1672470592 = 29 ^ 3 + 1187 ^ 3 = 632 ^ 3 + 1124 ^ 3
1673170856 = 458 ^ 3 + 1164 ^ 3 = 828 ^ 3 + 1034 ^ 3
1675045225 = 522 ^ 3 + 1153 ^ 3 = 744 ^ 3 + 1081 ^ 3
1675958167 = 492 ^ 3 + 1159 ^ 3 = 711 ^ 3 + 1096 ^ 3
1676926719 = 63 ^ 3 + 1188 ^ 3 = 714 ^ 3 + 1095 ^ 3
1677646971 = 99 ^ 3 + 1188 ^ 3 = 891 ^ 3 + 990 ^ 3</pre>
 
=={{header|Go}}==
457

edits