Extreme primes: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|Wren}}: Changed to deal with stretch goal.)
m (→‎{{header|Wren}}: Minor change to output.)
Line 234: Line 234:
System.print()
System.print()
} else if (count % 1000 == 0) {
} else if (count % 1000 == 0) {
Fmt.print("The $,d extreme prime is: $,14d for p <= $,9d", count, sum, p)
Fmt.print("The $,r extreme prime is: $,14d for p <= $,9d", count, sum, p)
if (count == 5000) return
if (count == 5000) return
}
}
Line 250: Line 250:
116,533 119,069 121,631 129,419 132,059 263,171
116,533 119,069 121,631 129,419 132,059 263,171


The 1,000 extreme prime is: 1,657,620,079 for p <= 196,831
The 1,000th extreme prime is: 1,657,620,079 for p <= 196,831
The 2,000 extreme prime is: 9,744,982,591 for p <= 495,571
The 2,000th extreme prime is: 9,744,982,591 for p <= 495,571
The 3,000 extreme prime is: 24,984,473,177 for p <= 808,837
The 3,000th extreme prime is: 24,984,473,177 for p <= 808,837
The 4,000 extreme prime is: 49,394,034,691 for p <= 1,152,763
The 4,000th extreme prime is: 49,394,034,691 for p <= 1,152,763
The 5,000 extreme prime is: 82,195,983,953 for p <= 1,500,973
The 5,000th extreme prime is: 82,195,983,953 for p <= 1,500,973
</pre>
</pre>



Revision as of 16:15, 25 April 2023

Extreme 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.
Definition

Write down the first prime number, add the next prime number and if it is prime, add it to the series and so on. These primes are called extreme primes.

Task

Find and display the first 30 extreme primes on this page.

Stretch

Find and display the 1,000th, 2,000th, 3,000th, 4,000th and 5,000th extreme primes and for each one show the prime number p up to and including which primes need to be summed to obtain it.

Related (and near duplicate) tasks
Reference

OEIS sequence A013918

FreeBASIC

#include "isprime.bas"
Dim As Integer limit = 2000, n, c = 0
Dim As Integer Primes()

For n = 1 To limit
    If isPrime(n) Then 
        c += 1
        Redim Preserve Primes(n)
        Primes(c) = n
    End If
Next n

Print "The first 30 extreme primes are:"
Dim As Integer sum = 0, row = 0

For n = 1 To Ubound(Primes)
    sum += Primes(n)
    If isPrime(sum) Then 
        row += 1
        Print Using "########"; sum;
        If row Mod 10 = 0 Then Print
    End If
Next n

Sleep
Output:
Similar to Ring entry.

J

   3 10$(#~ 1&p:)+/\p:i.4e4
    2     5     17     41    197    281   7699   8893  22039  24133
25237 28697  32353  37561  38921  43201  44683  55837  61027  66463
70241 86453 102001 109147 116533 119069 121631 129419 132059 263171

This would be more efficient if we had used 3e3 (216 extreme primes) rather than 4e4 (1942 extreme primes)

Julia

julia> using Primes

julia> n = 0
0

julia> for p in primes(2000) n += p; isprime(n) && println(n); end
2
5
17
41
197
281
7699
8893
22039
24133
25237
28697
32353
37561
38921
43201
44683
55837
61027
66463
70241
86453
102001
109147
116533
119069
121631
129419
132059
263171

Phix

with javascript_semantics
constant lim = 30
sequence extremes = {}
integer ep = 0, np = 1
while length(extremes)<lim do
    ep += get_prime(np); np += 1
    if is_prime(ep) then extremes &= ep end if
end while
printf(1,"The first %d extreme primes are:\n%s\n",{lim,join_by(extremes,1,6,fmt:="%,7d")})
Output:
The first 30 extreme primes are:
      2         5        17        41       197       281
  7,699     8,893    22,039    24,133    25,237    28,697
 32,353    37,561    38,921    43,201    44,683    55,837
 61,027    66,463    70,241    86,453   102,001   109,147
116,533   119,069   121,631   129,419   132,059   263,171

Python

""" rosettacode.org/wiki/Extreme_primes """

from sympy import isprime, nextprime

ecount, p, n = 0, 0, 0

while ecount < 30:
    p = nextprime(p)
    n += p
    if isprime(n):
        ecount += 1
        print(f'Sum of prime series up to {p}: prime {n}')
Output:
Sum of prime series up to 2: prime 2
Sum of prime series up to 3: prime 5
Sum of prime series up to 7: prime 17
Sum of prime series up to 13: prime 41
Sum of prime series up to 37: prime 197
Sum of prime series up to 43: prime 281
Sum of prime series up to 281: prime 7699
Sum of prime series up to 311: prime 8893
Sum of prime series up to 503: prime 22039
Sum of prime series up to 541: prime 24133
Sum of prime series up to 557: prime 25237
Sum of prime series up to 593: prime 28697
Sum of prime series up to 619: prime 32353
Sum of prime series up to 673: prime 37561
Sum of prime series up to 683: prime 38921
Sum of prime series up to 733: prime 43201
Sum of prime series up to 743: prime 44683
Sum of prime series up to 839: prime 55837
Sum of prime series up to 881: prime 61027
Sum of prime series up to 929: prime 66463
Sum of prime series up to 953: prime 70241
Sum of prime series up to 1061: prime 86453
Sum of prime series up to 1163: prime 102001
Sum of prime series up to 1213: prime 109147
Sum of prime series up to 1249: prime 116533
Sum of prime series up to 1277: prime 119069
Sum of prime series up to 1283: prime 121631
Sum of prime series up to 1307: prime 129419
Sum of prime series up to 1321: prime 132059
Sum of prime series up to 1949: prime 263171

Ring

see "working..." + nl
limit = 2000
Primes = []

for n = 1 to limit
     if isPrime(n)
        add(Primes,n)
     ok
next
sum = 0
row = 0

for n = 1 to len(Primes)
     sum = sum + Primes[n]
     if isPrime(sum)
        row++
        see "" + sum + " "
        if row % 10 = 0
           see nl
        ok
      ok
next
see "done..." + nl

func isPrime num
     if (num <= 1) return 0 ok
     if (num % 2 = 0 and num != 2) return 0 ok
     for i = 3 to floor(num / 2) -1 step 2
         if (num % i = 0) return 0 ok
     next
     return 1
Output:
working...
2 5 17 41 197 281 7699 8893 22039 24133 
25237 28697 32353 37561 38921 43201 44683 55837 61027 66463 
70241 86453 102001 109147 116533 119069 121631 129419 132059 263171 
done...

Wren

Library: Wren-math
Library: Wren-fmt

This is very similar to the Prime numbers p for which the sum of primes less than or equal to p is prime task which itself was a near duplicate of the Summarize primes task so I'm highly dubious about converting it to a separate draft task. I also found it at OEIS-A013918 though it doesn't appear to have a recognized name.
--- Based on the above reasons, please delete this task. Thanks in advance. --- CalmoSoft

--- Unfortunately, no one seems to have the power to delete tasks since the migration to Miraheze and I don't want to unilaterally blank the page when there are already 8 solutions. What I've done instead is to make it a bit more interesting than the related tasks by adding a stretch goal. ---PureFox

import "./math" for Int
import "./fmt" for Fmt

var extremes = [2]
var sum = 2
var p = 3
var count = 1
while (true) {
    sum = sum + p
    if (Int.isPrime(sum)) {
        count = count + 1
        if (count <= 30) {
            extremes.add(sum)
        }
        if (count == 30) {
            System.print("The first 30 extreme primes are:")
            Fmt.tprint("$,7d ", extremes, 6)
            System.print()
        } else if (count % 1000 == 0) {
            Fmt.print("The $,r extreme prime is: $,14d for p <= $,9d", count, sum, p)
            if (count == 5000) return
        }
    }
    p = Int.nextPrime(p)
}
Output:
The first 30 extreme primes are:
      2        5       17       41      197      281 
  7,699    8,893   22,039   24,133   25,237   28,697 
 32,353   37,561   38,921   43,201   44,683   55,837 
 61,027   66,463   70,241   86,453  102,001  109,147 
116,533  119,069  121,631  129,419  132,059  263,171 

The 1,000th extreme prime is:  1,657,620,079 for p <=   196,831
The 2,000th extreme prime is:  9,744,982,591 for p <=   495,571
The 3,000th extreme prime is: 24,984,473,177 for p <=   808,837
The 4,000th extreme prime is: 49,394,034,691 for p <= 1,152,763
The 5,000th extreme prime is: 82,195,983,953 for p <= 1,500,973

XPL0

include xpllib; \for IsPrime and RlOutC
int C, N, S;
[Text(0, "The first 30 extreme primes are:^m^j");
Format(7,0);
C:= 0;  N:= 2;  S:= 0;
loop    [if IsPrime(N) then
            [S:= S+N;
            if IsPrime(S) then
                [C:= C+1;
                RlOutC(0, float(S));
                if rem(C/6) = 0 then CrLf(0);
                if C >= 30 then quit;
                ];
            ];
        N:= N+1;
        ];
]
Output:
The first 30 extreme primes are:
        2        5       17       41      197      281
    7,699    8,893   22,039   24,133   25,237   28,697
   32,353   37,561   38,921   43,201   44,683   55,837
   61,027   66,463   70,241   86,453  102,001  109,147
  116,533  119,069  121,631  129,419  132,059  263,171