Successive prime differences: Difference between revisions

Content added Content deleted
(Added Algol 68)
Line 30: Line 30:
:#https://www.primepuzzles.net/puzzles/puzz_011.htm
:#https://www.primepuzzles.net/puzzles/puzz_011.htm
:#https://matheplanet.de/matheplanet/nuke/html/viewtopic.php?topic=232720&start=0
:#https://matheplanet.de/matheplanet/nuke/html/viewtopic.php?topic=232720&start=0

=={{header|ALGOL 68}}==
<lang algol68>BEGIN # find some sequences of primes where the gaps between the elements #
# follow specific patterns #
# reurns a list of primes up to n #
PROC prime list = ( INT n )[]INT:
BEGIN
# sieve the primes to n #
INT no = 0, yes = 1;
[ 1 : n ]INT p;
p[ 1 ] := no; p[ 2 ] := yes;
FOR i FROM 3 BY 2 TO n DO p[ i ] := yes OD;
FOR i FROM 4 BY 2 TO n DO p[ i ] := no OD;
FOR i FROM 3 BY 2 TO ENTIER sqrt( n ) DO
IF p[ i ] = yes THEN FOR s FROM i * i BY i + i TO n DO p[ s ] := no OD FI
OD;
# replace the sieve with a list #
INT p pos := 0;
FOR i TO n DO IF p[ i ] = yes THEN p[ p pos +:= 1 ] := i FI OD;
p[ 1 : p pos ]
END # prime list # ;
# prints the elements of list #
PROC print list = ( STRING name, []INT list )VOID:
BEGIN
print( ( name, "[" ) );
FOR i FROM LWB list TO UPB list DO print( ( " ", whole( list[ i ], 0 ) ) ) OD;
print( ( " ]" ) )
END # print list # ;
# attempts to find patterns in the differences of primes and prints the results #
PROC try differences = ( []INT primes, []INT pattern )VOID:
BEGIN
INT pattern length = ( UPB pattern - LWB pattern ) + 1;
[ 1 : pattern length + 1 ]INT first; FOR i TO UPB first DO first[ i ] := 0 OD;
[ 1 : pattern length + 1 ]INT last; FOR i TO UPB last DO last[ i ] := 0 OD;
INT count := 0;
FOR p FROM LWB primes + pattern length TO UPB primes DO
BOOL matched := TRUE;
INT e pos := LWB pattern;
FOR e FROM p - pattern length TO p - 1
WHILE matched := primes[ e + 1 ] - primes[ e ] = pattern[ e pos ]
DO
e pos +:= 1
OD;
IF matched THEN
# found a matching sequence #
count +:= 1;
last := primes[ p - pattern length : p @ 1 ];
IF count = 1 THEN first := last FI
FI
OD;
print( ( " Found ", whole( count, 0 ), " prime sequence(s) that differ by: " ) );
print list( "", pattern );
print( ( newline ) );
IF count > 0 THEN
# found at least one sequence #
print list( " first: ", first );
print list( " last: ", last );
print( ( newline ) )
FI;
print( ( newline ) )
END # try differences # ;
INT max number = 1 000 000;
[]INT p list = prime list( max number );
print( ( "For primes up to ", whole( max number, 0 ), "...", newline ) );
try differences( p list, ( 2 ) );try differences( p list, ( 1 ) );
try differences( p list, ( 2, 2 ) );try differences( p list, ( 2, 4 ) );
try differences( p list, ( 4, 2 ) );try differences( p list, ( 6, 4, 2 ) );
try differences( p list, ( 2, 4, 6, 8 ) );try differences( p list, ( 2, 4, 6, 8, 10 ) );
try differences( p list, ( 32, 16, 8, 4, 2 ) )
END</lang>
{{out}}
<pre>
For primes up to 1000000...
Found 8169 prime sequence(s) that differ by: [ 2 ]
first: [ 3 5 ] last: [ 999959 999961 ]

Found 1 prime sequence(s) that differ by: [ 1 ]
first: [ 2 3 ] last: [ 2 3 ]

Found 1 prime sequence(s) that differ by: [ 2 2 ]
first: [ 3 5 7 ] last: [ 3 5 7 ]

Found 1393 prime sequence(s) that differ by: [ 2 4 ]
first: [ 5 7 11 ] last: [ 999431 999433 999437 ]

Found 1444 prime sequence(s) that differ by: [ 4 2 ]
first: [ 7 11 13 ] last: [ 997807 997811 997813 ]

Found 306 prime sequence(s) that differ by: [ 6 4 2 ]
first: [ 31 37 41 43 ] last: [ 997141 997147 997151 997153 ]

Found 68 prime sequence(s) that differ by: [ 2 4 6 8 ]
first: [ 347 349 353 359 367 ] last: [ 984911 984913 984917 984923 984931 ]

Found 11 prime sequence(s) that differ by: [ 2 4 6 8 10 ]
first: [ 13901 13903 13907 13913 13921 13931 ] last: [ 954257 954259 954263 954269 954277 954287 ]

Found 1 prime sequence(s) that differ by: [ 32 16 8 4 2 ]
first: [ 148091 148123 148139 148147 148151 148153 ] last: [ 148091 148123 148139 148147 148151 148153 ]

</pre>


=={{header|AWK}}==
=={{header|AWK}}==