40 lines
1.7 KiB
Text
40 lines
1.7 KiB
Text
BEGIN # find some Fortunate numbers m, m is smallest positive integer > 1 #
|
|
# where primorial(n) + m is prime for some n #
|
|
# as all primorials are even, m must be odd #
|
|
|
|
PR precision 2000 PR # set the number of digits for LONG LONG INT #
|
|
PR read "primes.incl.a68" PR # include prime utilities #
|
|
INT max fortunate = 500; # largeest fortunate number we will consider #
|
|
[]BOOL is prime = PRIMESIEVE 5 000;
|
|
[ 1 : max fortunate ]INT fortunate; FOR i TO max fortunate DO fortunate[ i ] := 0 OD;
|
|
INT primorial pos := 0;
|
|
LONG LONG INT primorial := 1;
|
|
INT prime pos := 0;
|
|
WHILE primorial pos < 100 DO
|
|
WHILE NOT is prime[ prime pos +:= 1 ] DO SKIP OD;
|
|
primorial pos +:= 1;
|
|
primorial *:= prime pos;
|
|
INT m := 3;
|
|
WHILE NOT is probably prime( primorial + m ) AND m <= max fortunate DO m +:= 2 OD;
|
|
IF m <= max fortunate THEN
|
|
IF fortunate[ m ] = 0 THEN fortunate[ m ] := primorial pos FI
|
|
FI
|
|
OD;
|
|
print( ( "The first 50 Fortunate numbers:", newline ) );
|
|
INT f count := 0;
|
|
FOR f TO max fortunate WHILE f count < 50 DO
|
|
IF fortunate[ f ] /= 0 THEN
|
|
print( ( whole( f, -5 ) ) );
|
|
IF ( f count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI
|
|
FI
|
|
OD;
|
|
print( ( "The primorial associated with the first 50 Fortunate numbers:", newline ) );
|
|
f count := 0;
|
|
FOR f TO max fortunate WHILE f count < 50 DO
|
|
IF fortunate[ f ] /= 0 THEN
|
|
print( ( whole( fortunate[ f ], -5 ) ) );
|
|
IF ( f count +:= 1 ) MOD 10 = 0 THEN print( ( newline ) ) FI
|
|
FI
|
|
OD
|
|
|
|
END
|