Consecutive primes with ascending or descending differences: Difference between revisions

→‎{{header|ALGOL 68}}: Tweaked the code
(Realize in F#)
(→‎{{header|ALGOL 68}}: Tweaked the code)
Line 33:
p[ 1 : p pos ]
END # prime list # ;
# shos the results of a search #
# find the longest sequence of primes where the successive differences are ascending #
PROC show sequence = ( []INT primes, STRING seq name, INT seq start, seq length )VOID:
BEGIN
print( ( " The longest sequence of primes with "
, seq name
, " differences contains "
, whole( seq length, 0 )
, " primes"
, newline
, " First such sequence (differences in brackets):"
, newline
, " "
)
);
print( ( whole( primes[ seq start ], 0 ) ) );
FOR p FROM seq start + 1 TO seq start + ( seq length - 1 ) DO
print( ( " (", whole( ABS( primes[ p ] - primes[ p - 1 ] ), 0 ), ") ", whole( primes[ p ], 0 ) ) )
OD;
print( ( newline ) )
END # show seuence # ;
# find the longest sequence of primes where the successive differences are ascending/descending #
PROC find sequence = ( []INT primes, BOOL ascending, REF INT seq start, seq length )VOID:
BEGIN
seq start := seq length := 0;
INT start diff = IF ascending THEN 0 ELSE UPB primes + 1 FI;
FOR p FROM LWB primes TO UPB primes DO
INT prev diff := start diff;
INT length := 1;
FOR s FROM p + 1 TO UPB primes
WHILE INT diff = ABS ( primes[ s ] - primes[ s - 1 ] );
IF ascending THEN diff > prev diff ELSE diff < prev diff FI
DO
length +:= 1;
prev diff := diff
OD;
IF length > seq length THEN
# found a longer sequence #
seq length := length;
seq start := p
FI
OD
END # find sequence #;
INT max number = 1 000 000;
[]INT primes = prime list( max number );
Line 40 ⟶ 81:
INT desc length := 0;
INT desc start := 0;
find sequence( primes, TRUE, asc start, asc length );
FOR p FROM LWB primes TO UPB primes DO
find sequence( primes, FALSE, INTdesc prevstart, diffdesc :=length 0);
INT length := 1;
FOR s FROM p + 1 TO UPB primes
WHILE INT diff = primes[ s ] - primes[ s - 1 ];
diff > prev diff
DO
length +:= 1;
prev diff := diff
OD;
IF length > asc length THEN
# found a longer sequence #
asc length := length;
asc start := p
FI
OD;
# find the longest sequence of primes where the successive differences are descending #
FOR p FROM LWB primes TO UPB primes DO
INT prev diff := max number + 1;
INT length := 1;
FOR s FROM p + 1 TO UPB primes
WHILE INT diff = primes[ s ] - primes[ s - 1 ];
diff < prev diff
DO
length +:= 1;
prev diff := diff
OD;
IF length > desc length THEN
# found a longer sequence #
desc length := length;
desc start := p
FI
OD;
# show the sequences #
print( ( "For primes up to ", whole( max number, 0 ), newline ) );
show sequence( primes, "ascending", asc start, asc length );
print( ( " Longest sequence of primes with ascending differences contains "
show sequence( primes, "descending", desc start, whole( ascdesc length, 0 )
, " primes, first such sequence:"
, newline
, "(differences in brackets):"
, newline
, " "
)
);
print( ( whole( primes[ asc start ], 0 ) ) );
FOR p FROM asc start + 1 TO asc start + ( asc length - 1 ) DO
print( ( " (", whole( primes[ p ] - primes[ p - 1 ], 0 ), ") ", whole( primes[ p ], 0 ) ) )
OD;
print( ( newline ) );
print( ( " Longest sequence of primes with descending differences contains "
, whole( asc length, 0 )
, " primes, first such sequence:"
, newline
, "(differences in brackets):"
, newline
, " "
)
);
print( ( whole( primes[ desc start ], 0 ) ) );
FOR p FROM desc start + 1 TO desc start + ( desc length - 1 ) DO
print( ( " (", whole( primes[ p ] - primes[ p - 1 ], 0 ), ") ", whole( primes[ p ], 0 ) ) )
OD;
print( ( newline ) )
END</lang>
{{out}}
<pre>
For primes up to 1000000
LongestThe longest sequence of primes with ascending differences contains 8 primes, first such sequence:
First such sequence (differences in brackets):
128981 (2) 128983 (4) 128987 (6) 128993 (8) 129001 (10) 129011 (12) 129023 (14) 129037
LongestThe longest sequence of primes with descending differences contains 8 primes, first such sequence:
First such sequence (differences in brackets):
322171 (22) 322193 (20) 322213 (16) 322229 (8) 322237 (6) 322243 (4) 322247 (2) 322249
</pre>
 
3,038

edits