Sum of primes in odd positions is prime: Difference between revisions
No edit summary |
|||
Line 71: | Line 71: | ||
143 823 26,879 |
143 823 26,879 |
||
</pre> |
</pre> |
||
=={{header|Nim}}== |
|||
<lang Nim>import strformat |
|||
template isOdd(n: Natural): bool = (n and 1) != 0 |
|||
template isEven(n: Natural): bool = (n and 1) == 0 |
|||
func isPrime(n: Positive): bool = |
|||
if n == 1: return false |
|||
if n.isEven: return n == 2 |
|||
if n mod 3 == 0: return n == 3 |
|||
var d = 5 |
|||
while d * d <= n: |
|||
if n mod d == 0: return false |
|||
inc d, 2 |
|||
if n mod d == 0: return false |
|||
inc d, 4 |
|||
result = true |
|||
# Compute the sums of primes at odd position. |
|||
echo " i p(i) sum" |
|||
var idx = 0 |
|||
var sum = 0 |
|||
var p = 1 |
|||
while p < 1000: |
|||
inc p |
|||
if p.isPrime: |
|||
inc idx |
|||
if idx.isOdd: |
|||
inc sum, p |
|||
if sum.isPrime: |
|||
echo &"{idx:3} {p:3} {sum:5}"</lang> |
|||
{{out}} |
|||
<pre> i p(i) sum |
|||
1 2 2 |
|||
3 5 7 |
|||
11 31 89 |
|||
27 103 659 |
|||
35 149 1181 |
|||
67 331 5021 |
|||
91 467 9923 |
|||
95 499 10909 |
|||
99 523 11941 |
|||
119 653 17959 |
|||
143 823 26879</pre> |
|||
=={{header|Raku}}== |
=={{header|Raku}}== |
||
<lang perl6>my @odd = grep { ++$ !%% 2 }, grep &is-prime, 2 ..^ 1000; |
<lang perl6>my @odd = grep { ++$ !%% 2 }, grep &is-prime, 2 ..^ 1000; |
Revision as of 16:23, 1 September 2021
- Task
Let p(i) be a sequence of prime numbers.
Consider the p(1),p(3),p(5), ... ,p(i), for each p(i) < 1,000 and i is odd.
Let sum be the sum of these primes.
If sum is prime then print i, p(i) and sum.
Factor
<lang factor>USING: assocs assocs.extras kernel math.primes math.statistics prettyprint sequences.extras ;
1000 primes-upto <evens> dup cum-sum zip [ prime? ] filter-values .</lang>
- Output:
{ { 2 2 } { 5 7 } { 31 89 } { 103 659 } { 149 1181 } { 331 5021 } { 467 9923 } { 499 10909 } { 523 11941 } { 653 17959 } { 823 26879 } }
Go
<lang go>package main
import (
"fmt" "rcu"
)
func main() {
primes := rcu.Primes(999) sum := 0 fmt.Println(" i p[i] Σp[i]") fmt.Println("----------------") for i := 0; i < len(primes); i += 2 { sum += primes[i] if rcu.IsPrime(sum) { fmt.Printf("%3d %3d %6s\n", i+1, primes[i], rcu.Commatize(sum)) } }
}</lang>
- Output:
i p[i] Σp[i] ---------------- 1 2 2 3 5 7 11 31 89 27 103 659 35 149 1,181 67 331 5,021 91 467 9,923 95 499 10,909 99 523 11,941 119 653 17,959 143 823 26,879
Nim
<lang Nim>import strformat
template isOdd(n: Natural): bool = (n and 1) != 0 template isEven(n: Natural): bool = (n and 1) == 0
func isPrime(n: Positive): bool =
if n == 1: return false if n.isEven: return n == 2 if n mod 3 == 0: return n == 3 var d = 5 while d * d <= n: if n mod d == 0: return false inc d, 2 if n mod d == 0: return false inc d, 4 result = true
- Compute the sums of primes at odd position.
echo " i p(i) sum" var idx = 0 var sum = 0 var p = 1 while p < 1000:
inc p if p.isPrime: inc idx if idx.isOdd: inc sum, p if sum.isPrime: echo &"{idx:3} {p:3} {sum:5}"</lang>
- Output:
i p(i) sum 1 2 2 3 5 7 11 31 89 27 103 659 35 149 1181 67 331 5021 91 467 9923 95 499 10909 99 523 11941 119 653 17959 143 823 26879
Raku
<lang perl6>my @odd = grep { ++$ !%% 2 }, grep &is-prime, 2 ..^ 1000; my @sums = [\+] @odd;
say .fmt('%5d') for grep { .[1].is-prime }, ( @odd Z @sums );</lang>
- Output:
2 2 5 7 31 89 103 659 149 1181 331 5021 467 9923 499 10909 523 11941 653 17959 823 26879
Ring
<lang ring> load "stdlib.ring" see "working..." + nl see "i p sum" + nl
nr = 0 sum = 0 limit = 1000
for n = 2 to limit
if isprime(n) nr++ if nr%2 = 1 sum += n if isprime(sum) see "" + nr + " " + n + " " + sum + nl ok ok ok
next
see "done..." + nl </lang>
- Output:
working... i p sum 1 2 2 3 5 7 11 31 89 27 103 659 35 149 1181 67 331 5021 91 467 9923 95 499 10909 99 523 11941 119 653 17959 143 823 26879 done...
Wren
<lang ecmascript>import "/math" for Int import "/trait" for Indexed import "/fmt" for Fmt
var primes = Int.primeSieve(999) var sum = 0 System.print(" i p[i] Σp[i]") System.print("----------------") for (se in Indexed.new(primes, 2)) {
sum = sum + se.value if (Int.isPrime(sum)) Fmt.print("$3d $3d $,6d", se.index + 1, se.value, sum)
}</lang>
- Output:
i p[i] Σp[i] ---------------- 1 2 2 3 5 7 11 31 89 27 103 659 35 149 1,181 67 331 5,021 91 467 9,923 95 499 10,909 99 523 11,941 119 653 17,959 143 823 26,879
XPL0
<lang XPL0>func IsPrime(N); \Return 'true' if N is a prime number int N, I; [if N <= 1 then return false; for I:= 2 to sqrt(N) do
if rem(N/I) = 0 then return false;
return true; ];
int I, Sum, N; [Text(0, "p(n) sum^m^j"); Sum:= 0; I:= 0; for N:= 2 to 1000-1 do
[if IsPrime(N) then [I:= I+1; if I&1 then \odd [Sum:= Sum + N; if IsPrime(Sum) then [IntOut(0, N); ChOut(0, ^ ); IntOut(0, Sum); CrLf(0)]; ]; ]; ];
]</lang>
- Output:
p(n) sum 2 2 5 7 31 89 103 659 149 1181 331 5021 467 9923 499 10909 523 11941 653 17959 823 26879