Ulam numbers: Difference between revisions
→{{header|ALGOL 68}}: Improve the algorithm to be more like the XPL0 sample
(Added Algol 68) |
(→{{header|ALGOL 68}}: Improve the algorithm to be more like the XPL0 sample) |
||
Line 97:
BEGIN # find some Ulam numbers, U(n) = the smallest number > U(n-1) that is #
# the uniue sum of U(i) and U(j), i, j < n, i =/= j, U(1)=1, U(2) = 2 #
[ 1 : max ulam ]INT u; # ulam numbers found #
INT ulam size = 20 000; # initial size of the ulam number buffer #
CHAR unused = "0", one = "1", multiple = "2"; # states of ulam numbers #
FLEX[ 1 : ulam size ]CHAR ulam;FOR i TO UPB ulam DO ulam[ i ] := unused OD;
ulam[ 3 ] := ulam[ 2 ] := ulam[ 1 ] := one; u[ 1 ] := 1; u[ 2 ] := 2;
print( ( " 1 2" ) );
INT u count := 2;
INT power of ten := 100;
FOR i FROM 3 WHILE u count < max ulam DO
▲ INT max ulam = 10 000; # maximum ulam number to find #
▲ FOR i FROM 3 WHILE u count < 10 000 DO
IF ulam[ i ] = one THEN
# can use this number #
IF u count <
IF u count = 20 THEN print( ( "..." ) ) FI
ELIF u count = power of ten THEN
print( ( newline, "The ", whole( power of ten, -6 ), "th Ulam number is: ", whole( i, 0 ) ) );
power of ten *:= 10
FI;
FOR p TO
[ 1 : UPB
new
FOR u FROM
CHAR upi =
IF
THEN ulam[ pi ]
ELIF upi
THEN ulam[ pi ] := multiple # p + i isn't unique
▲ FI
FI
OD
Line 138 ⟶ 140:
{{out}}
<pre>
1 2 3 4 6 8 11 13 16 18 26 28 36 38 47 48 53 57 62 69...
The 100th Ulam number is: 690
The 1000th Ulam number is: 12294
|