Summation of primes: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|ALGOL 68}}: no need to check even numbers... doh!)
(Add Factor)
Line 97: Line 97:
}</lang>
}</lang>
{{out}}<pre>142913828922</pre>
{{out}}<pre>142913828922</pre>

=={{header|Factor}}==
<lang factor>USING: math.primes prettyprint sequences ;

2,000,000 primes-upto sum .</lang>
{{out}}
<pre>
142913828922
</pre>


=={{header|Fermat}}==
=={{header|Fermat}}==

Revision as of 16:03, 8 November 2021

Summation of primes is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task


The task description is taken from Project Euler (https://projecteuler.net/problem=10)
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17
Find the sum of all the primes below two million

ALGOL 68

<lang algol68>BEGIN # sum primes up to 2 000 000 #

   PR read "primes.incl.a68" PR
   # return s space-separated into groups of 3 digits #
   PROC space separate = ( STRING unformatted )STRING:
        BEGIN
           STRING result      := "";
           INT    ch count    := 0;
           FOR c FROM UPB unformatted BY -1 TO LWB unformatted DO
               IF   ch count <= 2 THEN ch count +:= 1
               ELSE                    ch count  := 1; " " +=: result
               FI;
               unformatted[ c ] +=: result
           OD;
           result
        END # space separate # ;
   # sum the primes #
   []BOOL prime = PRIMESIEVE 2 000 000;
   LONG INT sum := 2;
   FOR i FROM 3 BY 2 TO UPB prime DO
           IF prime[ i ] THEN
           sum +:= i
       FI
   OD;
   print( ( space separate( whole( sum, 0 ) ), newline ) )

END</lang>

Output:
142 913 828 922

BASIC

FreeBASIC

<lang freebasic>#include "isprime.bas"

dim as integer sum = 2, i, n=1 for i = 3 to 2000000 step 2

   if isprime(i) then
       sum += i
       n+=1
   end if

next i

print sum</lang>

Output:
142913828922

GW-BASIC

<lang gwbasic>10 S# = 2 20 FOR P = 3 TO 1999999! STEP 2 30 GOSUB 80 40 IF Q=1 THEN S#=S#+P 50 NEXT P 60 PRINT S# 70 END 80 Q=0 90 IF P=3 THEN Q=1:RETURN 100 I=1 110 I=I+2 120 IF INT(P/I)*I = P THEN RETURN 130 IF I*I<=P THEN GOTO 110 140 Q = 1 150 RETURN </lang>

Output:
142913828922

C

<lang c>#include<stdio.h>

  1. include<stdlib.h>

int isprime( int p ) {

   int i;
   if(p==2) return 1;
   if(!(p%2)) return 0;
   for(i=3; i*i<=p; i+=2) {
      if(!(p%i)) return 0;
   }
   return 1;

}

int main( void ) {

   int p;
   long int s = 2;
   for(p=3;p<2000000;p+=2) {
       if(isprime(p)) s+=p;
   }
   printf( "%ld\n", s );
   return 0;

}</lang>

Output:
142913828922

Factor

<lang factor>USING: math.primes prettyprint sequences ;

2,000,000 primes-upto sum .</lang>

Output:
142913828922

Fermat

<lang fermat>s:=2; for p=3 to 1999999 by 2 do if Isprime(p) then s:=s+p fi od; !!s;</lang>

Output:
142913828922

Go

Library: Go-rcu

<lang go>package main

import (

   "fmt"
   "rcu"

)

func main() {

   sum := 0
   for _, p := range rcu.Primes(2e6 - 1) {
       sum += p
   }
   fmt.Printf("The sum of all primes below 2 million is %s.\n", rcu.Commatize(sum))

}</lang>

Output:
The sum of all primes below 2 million is 142,913,828,922.


Julia

<lang julia>using Primes

@show sum(primes(2_000_000)) # sum(primes(2000000)) = 142913828922 </lang>


PARI/GP

<lang parigp> s=2; p=3 while(p<2000000,if(isprime(p),s=s+p);p=p+2) print(s) </lang>

Output:

142913828922

Pascal

uses

Library: primTrial

<lang pascal> program SumPrimes; {$IFDEF FPC}{$MODE DELPHI}{$OPTIMIZATION ON,ALL} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses

 SysUtils,primTrial;

var

 p,sum : NativeInt;

begin

 sum := actPrime;
 repeat inc(sum,p); p := NextPrime until p >= 2*1000*1000;
 writeln(sum);
 {$IFDEF WINDOWS} readln;{$ENDIF}

end.</lang>

Output:
142913828922

Raku

Slow, but only using compiler built-ins (about 5 seconds) <lang perl6>say sum (^2e6).grep: {.&is-prime};</lang>

Output:
142913828922

Much faster using external libraries (well under half a second) <lang perl6>use Math::Primesieve; my $sieve = Math::Primesieve.new; say sum $sieve.primes(2e6.Int);</lang> Same output

Ring

<lang ring> load "stdlib.ring" see "working..." + nl sum = 2 limit = 2000000

for n = 3 to limit step 2

   if isprime(n)
      sum += n
   ok

next

see "The sum of all the primes below two million:" + nl see "" + sum + nl see "done..." + nl </lang>

Output:
working...
The sum of all the primes below two million:
142,913,828,922
done...

Wren

Library: Wren-math
Library: Wren-fmt

<lang ecmascript>import "./math" for Int, Nums import "./fmt" for Fmt

Fmt.print("The sum of all primes below 2 million is $,d.", Nums.sum(Int.primeSieve(2e6-1)))</lang>

Output:
The sum of all primes below 2 million is 142,913,828,922.