Van Eck sequence: Difference between revisions

Content added Content deleted
(Put Algol W in the right place)
(Add COBOL)
Line 1,019: Line 1,019:
<pre>First 10 terms: (0 0 1 0 2 0 2 2 1 6)
<pre>First 10 terms: (0 0 1 0 2 0 2 2 1 6)
Terms 991 to 1000 terms: (4 7 30 25 67 225 488 0 10 136)</pre>
Terms 991 to 1000 terms: (4 7 30 25 67 225 488 0 10 136)</pre>

=={{header|COBOL}}==
<lang cobol> IDENTIFICATION DIVISION.
PROGRAM-ID. VAN-ECK.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CALCULATION.
02 ECK PIC 999 OCCURS 1000 TIMES.
02 I PIC 9999.
02 J PIC 9999.
01 OUTPUT-FORMAT.
02 ITEM PIC ZZ9.
02 IDX PIC ZZZ9.
PROCEDURE DIVISION.
B. PERFORM GENERATE-ECK.
PERFORM SHOW VARYING I FROM 1 BY 1 UNTIL I = 11.
PERFORM SHOW VARYING I FROM 991 BY 1 UNTIL I = 1001.
STOP RUN.
SHOW.
MOVE I TO IDX.
MOVE ECK(I) TO ITEM.
DISPLAY 'ECK(' IDX ') = ' ITEM.
GENERATE-ECK SECTION.
B. SET ECK(1) TO 0.
SET I TO 1.
PERFORM GENERATE-TERM
VARYING I FROM 2 BY 1 UNTIL I = 1001.
GENERATE-TERM SECTION.
B. SUBTRACT 2 FROM I GIVING J.
LOOP.
IF J IS LESS THAN 1 GO TO TERM-IS-NEW.
IF ECK(J) = ECK(I - 1) GO TO TERM-IS-OLD.
SUBTRACT 1 FROM J.
GO TO LOOP.
TERM-IS-NEW.
SET ECK(I) TO 0.
GO TO DONE.
TERM-IS-OLD.
COMPUTE ECK(I) = (I - J) - 1.
DONE. EXIT.</lang>
{{out}}
<pre>ECK( 1) = 0
ECK( 2) = 0
ECK( 3) = 1
ECK( 4) = 0
ECK( 5) = 2
ECK( 6) = 0
ECK( 7) = 2
ECK( 8) = 2
ECK( 9) = 1
ECK( 10) = 6
ECK( 991) = 4
ECK( 992) = 7
ECK( 993) = 30
ECK( 994) = 25
ECK( 995) = 67
ECK( 996) = 225
ECK( 997) = 488
ECK( 998) = 0
ECK( 999) = 10
ECK(1000) = 136</pre>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==