Summarize primes
- Task
Summarize first n primes (p) and check if it is a prime, where p < 1000
Factor
<lang factor>USING: assocs formatting kernel math.primes math.ranges math.statistics prettyprint ;
1000 [ [1,b] ] [ primes-upto cum-sum ] bi zip [ nip prime? ] assoc-filter [ "The sum of the first %3d primes is %5d (which is prime).\n" printf ] assoc-each</lang>
- Output:
The sum of the first 1 primes is 2 (which is prime). The sum of the first 2 primes is 5 (which is prime). The sum of the first 4 primes is 17 (which is prime). The sum of the first 6 primes is 41 (which is prime). The sum of the first 12 primes is 197 (which is prime). The sum of the first 14 primes is 281 (which is prime). The sum of the first 60 primes is 7699 (which is prime). The sum of the first 64 primes is 8893 (which is prime). The sum of the first 96 primes is 22039 (which is prime). The sum of the first 100 primes is 24133 (which is prime). The sum of the first 102 primes is 25237 (which is prime). The sum of the first 108 primes is 28697 (which is prime). The sum of the first 114 primes is 32353 (which is prime). The sum of the first 122 primes is 37561 (which is prime). The sum of the first 124 primes is 38921 (which is prime). The sum of the first 130 primes is 43201 (which is prime). The sum of the first 132 primes is 44683 (which is prime). The sum of the first 146 primes is 55837 (which is prime). The sum of the first 152 primes is 61027 (which is prime). The sum of the first 158 primes is 66463 (which is prime). The sum of the first 162 primes is 70241 (which is prime).
Go
<lang go>package main
import (
"fmt" "rcu"
)
func main() {
primes := rcu.Primes(999) sum, n, c := 0, 0, 0 fmt.Println("Summing the first n primes (<1,000) where the sum is itself prime:") fmt.Println(" n cumulative sum") for _, p := range primes { n++ sum += p if rcu.IsPrime(sum) { c++ fmt.Printf("%3d %6s\n", n, rcu.Commatize(sum)) } } fmt.Println() fmt.Println(c, "such prime sums found")
}</lang>
- Output:
Same as Wren example.
Raku
<lang perl6>my @primesums = ([\+] grep *.is-prime, ^Inf)[^1000]; say "Of the first {+@primesums} primes:"; printf "The sum of the first %*d is prime: %d\n", @primesums.end.chars, 1 + $_, @primesums[$_]
for grep { @primesums[$_].is-prime }, ^+@primesums;</lang>
- Output:
Of the first 1000 primes: The sum of the first 1 is prime: 2 The sum of the first 2 is prime: 5 The sum of the first 4 is prime: 17 The sum of the first 6 is prime: 41 The sum of the first 12 is prime: 197 The sum of the first 14 is prime: 281 The sum of the first 60 is prime: 7699 The sum of the first 64 is prime: 8893 The sum of the first 96 is prime: 22039 The sum of the first 100 is prime: 24133 The sum of the first 102 is prime: 25237 The sum of the first 108 is prime: 28697 The sum of the first 114 is prime: 32353 The sum of the first 122 is prime: 37561 The sum of the first 124 is prime: 38921 The sum of the first 130 is prime: 43201 The sum of the first 132 is prime: 44683 The sum of the first 146 is prime: 55837 The sum of the first 152 is prime: 61027 The sum of the first 158 is prime: 66463 The sum of the first 162 is prime: 70241 The sum of the first 178 is prime: 86453 The sum of the first 192 is prime: 102001 The sum of the first 198 is prime: 109147 The sum of the first 204 is prime: 116533 The sum of the first 206 is prime: 119069 The sum of the first 208 is prime: 121631 The sum of the first 214 is prime: 129419 The sum of the first 216 is prime: 132059 The sum of the first 296 is prime: 263171 The sum of the first 308 is prime: 287137 The sum of the first 326 is prime: 325019 The sum of the first 328 is prime: 329401 The sum of the first 330 is prime: 333821 The sum of the first 332 is prime: 338279 The sum of the first 334 is prime: 342761 The sum of the first 342 is prime: 360979 The sum of the first 350 is prime: 379667 The sum of the first 356 is prime: 393961 The sum of the first 358 is prime: 398771 The sum of the first 426 is prime: 581921 The sum of the first 446 is prime: 642869 The sum of the first 458 is prime: 681257 The sum of the first 460 is prime: 687767 The sum of the first 464 is prime: 700897 The sum of the first 480 is prime: 754573 The sum of the first 484 is prime: 768373 The sum of the first 488 is prime: 782263 The sum of the first 512 is prime: 868151 The sum of the first 530 is prime: 935507 The sum of the first 536 is prime: 958577 The sum of the first 548 is prime: 1005551 The sum of the first 568 is prime: 1086557 The sum of the first 620 is prime: 1313041 The sum of the first 630 is prime: 1359329 The sum of the first 676 is prime: 1583293 The sum of the first 680 is prime: 1603597 The sum of the first 696 is prime: 1686239 The sum of the first 708 is prime: 1749833 The sum of the first 734 is prime: 1891889 The sum of the first 762 is prime: 2051167 The sum of the first 768 is prime: 2086159 The sum of the first 776 is prime: 2133121 The sum of the first 780 is prime: 2156813 The sum of the first 784 is prime: 2180741 The sum of the first 808 is prime: 2327399 The sum of the first 814 is prime: 2364833 The sum of the first 820 is prime: 2402537 The sum of the first 836 is prime: 2504323 The sum of the first 844 is prime: 2556187 The sum of the first 848 is prime: 2582401 The sum of the first 852 is prime: 2608699 The sum of the first 926 is prime: 3120833 The sum of the first 942 is prime: 3238237 The sum of the first 984 is prime: 3557303 The sum of the first 992 is prime: 3619807
Ring
<lang ring> load "stdlib.ring" see "working..." + nl see "Summarize primes:" + nl see "n sum" + nl row = 0 sum = 0 limit = 1000 Primes = []
for n = 2 to limit
if isprime(n) add(Primes,n) ok
next
for n = 1 to len(Primes)
sum = sum + Primes[n] if isprime(sum) row = row + 1 see "" + n + " " + sum + nl ok
next
see "Found " + row + " numbers" + nl see "done..." + nl </lang>
- Output:
working... Summarize primes: n 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 numbers done...
Wren
<lang ecmascript>import "/math" for Int import "/fmt" for Fmt
var primes = Int.primeSieve(999) var sum = 0 var n = 0 var c = 0 System.print("Summing the first n primes (<1,000) where the sum is itself prime:") System.print(" n cumulative sum") for (p in primes) {
n = n + 1 sum = sum + p if (Int.isPrime(sum)) { c = c + 1 Fmt.print("$3d $,6d", n, sum) }
} System.print("\n%(c) such prime sums found")</lang>
- Output:
Summing the first n primes (<1,000) where the sum is itself prime: n cumulative sum 1 2 2 5 4 17 6 41 12 197 14 281 60 7,699 64 8,893 96 22,039 100 24,133 102 25,237 108 28,697 114 32,353 122 37,561 124 38,921 130 43,201 132 44,683 146 55,837 152 61,027 158 66,463 162 70,241 21 such prime sums found