Summarize primes: Difference between revisions
Content added Content deleted
(Added Algol 68) |
(Added Algol W) |
||
Line 53: | Line 53: | ||
) |
) |
||
END</lang> |
END</lang> |
||
{{out}} |
|||
<pre> |
|||
prime prime |
|||
count sum |
|||
1 2 |
|||
2 5 |
|||
4 17 |
|||
6 41 |
|||
12 197 |
|||
14 281 |
|||
60 7699 |
|||
64 8893 |
|||
96 22039 |
|||
100 24133 |
|||
102 25237 |
|||
108 28697 |
|||
114 32353 |
|||
122 37561 |
|||
124 38921 |
|||
130 43201 |
|||
132 44683 |
|||
146 55837 |
|||
152 61027 |
|||
158 66463 |
|||
162 70241 |
|||
Found 21 prime sums of primes below 1000 |
|||
</pre> |
|||
=={{header|ALGOL W}}== |
|||
<lang algolw>begin % sum the primes below n and report the sums that are prime % |
|||
integer MAX_NUMBER; |
|||
MAX_NUMBER := 999; |
|||
begin |
|||
logical array prime( 1 :: MAX_NUMBER ); |
|||
integer primeCount, primeSum, primeSumCount; |
|||
% sieve the primes to MAX_NUMBER % |
|||
prime( 1 ) := false; prime( 2 ) := true; |
|||
for i := 3 step 2 until MAX_NUMBER do prime( i ) := true; |
|||
for i := 4 step 2 until MAX_NUMBER do prime( i ) := false; |
|||
for i := 3 step 2 until truncate( sqrt( MAX_NUMBER ) ) do begin |
|||
integer ii; ii := i + i; |
|||
if prime( i ) then begin |
|||
for p := i * i step ii until MAX_NUMBER do prime( p ) := false |
|||
end if_prime_i |
|||
end for_i ; |
|||
% find the prime sums that are prime % |
|||
primeCount := primeSum := primeSumCount := 0; |
|||
write( "prime prime" ); |
|||
write( "count sum" ); |
|||
for i := 1 until MAX_NUMBER do begin |
|||
if prime( i ) then begin |
|||
% have another prime % |
|||
logical isPrime; |
|||
primeSum := primeSum + i; |
|||
primeCount := primeCount + 1; |
|||
% check whether the prime sum is also prime % |
|||
isPrime := true; |
|||
for p := 1 until i div 2 do begin |
|||
if prime( p ) then begin |
|||
isPrime := primeSum rem p not = 0; |
|||
if not isPrime then goto endPrimeCheck |
|||
end if_prime_p |
|||
end for_p ; |
|||
endPrimeCheck: |
|||
if isPrime then begin |
|||
% the prime sum is also prime % |
|||
primeSumCount := primeSumCount + 1; |
|||
write( i_w := 5, s_w := 0 |
|||
, primeCount |
|||
, " " |
|||
, i_w := 6 |
|||
, primeSum |
|||
) |
|||
end if_isPrime |
|||
end if_prime_i |
|||
end for_i ; |
|||
write(); |
|||
write( i_w := 1, s_w := 0 |
|||
, "Found " |
|||
, primeSumCount |
|||
, " prime sums of primes below " |
|||
, MAX_NUMBER + 1 |
|||
) |
|||
end |
|||
end.</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |