Equal prime and composite sums: Difference between revisions

Added Algol 68
(Added various BASIC dialects (BASIC256, Gambas, PureBasic and Yabasic) Moved FreeBASIC to section BASIC)
(Added Algol 68)
Line 31:
 
 
 
=={{header|ALGOL 68}}==
{{Trans|XPL0|With a few tweaks}}
<syntaxhighlight lang="algol68">
BEGIN # find n and m where the sums of the first n primes and first m #
# composites where the sums are equal #
 
MODE INTEGER = LONG INT; # size of INT MODE to use #
# alternative ROOT operators for different sizes of integer #
OP ROOT = ( INT n )INT: ENTIER sqrt( n );
OP ROOT = ( LONG INT n )LONG INT: ENTIER long sqrt( n );
 
PROC is prime = ( INTEGER n )BOOL: # returns TRUE if n is prime #
IF n <= 2 THEN n = 2
ELIF NOT ODD n THEN FALSE
ELSE BOOL prime := TRUE;
INTEGER i := 1;
INTEGER r := ROOT n;
WHILE ( i +:= 2 ) <= r AND prime DO prime := n MOD i /= 0 OD;
prime
FI # is prime # ;
 
INT count := 0;
INTEGER n := 2, m := 1, sum p := 5, sum c := 4, num p := 3, num c := 4;
print( ( " sum primes composites", newline ) );
 
WHILE IF sum c > sum p THEN
WHILE NOT is prime( num p +:= 2 ) DO SKIP OD;
sum p +:= num p;
n +:= 1
FI;
IF sum p > sum c THEN
WHILE is prime( num c +:= 1 ) DO SKIP OD;
sum c +:= num c;
m +:= 1
FI;
IF sum p /= sum c THEN TRUE # continue the loop #
ELSE
print( ( whole( sum p, -16 ), whole( n, -10 ), whole( m, -11 ), newline ) );
count +:= 1;
IF count >= 8 THEN FALSE # loop stops here #
ELSE
WHILE is prime( num c +:= 1 ) DO SKIP OD;
sum c +:= num c;
m +:= 1;
TRUE # continue the loop #
FI
FI
DO SKIP OD
END
</syntaxhighlight>
{{out}}
<pre>
sum primes composites
10 3 2
1988 33 51
14697 80 147
83292 175 361
1503397 660 1582
18859052 2143 5699
93952013 4556 12821
89171409882 118785 403341
</pre>
 
=={{header|BASIC}}==
3,037

edits