Equal prime and composite sums: Difference between revisions

Added Go
(Added C++ solution)
(Added Go)
Line 139:
Primes up to 390180569 at position 20840220 and composites up to 91491160 at position 86192660 sum to 3950430820867201.
</pre>
=={{header|Go}}==
{{trans|Wren}}
{{libheader|Go-rcu}}
<lang go>package main
 
import (
"fmt"
"log"
"rcu"
"sort"
)
 
func ord(n int) string {
if n < 0 {
log.Fatal("Argument must be a non-negative integer.")
}
m := n % 100
if m >= 4 && m <= 20 {
return fmt.Sprintf("%sth", rcu.Commatize(n))
}
m %= 10
suffix := "th"
if m == 1 {
suffix = "st"
} else if m == 2 {
suffix = "nd"
} else if m == 3 {
suffix = "rd"
}
return fmt.Sprintf("%s%s", rcu.Commatize(n), suffix)
}
 
func main() {
limit := int(4 * 1e8)
c := rcu.PrimeSieve(limit-1, true)
var compSums []int
var primeSums []int
csum := 0
psum := 0
for i := 2; i < limit; i++ {
if c[i] {
csum += i
compSums = append(compSums, csum)
} else {
psum += i
primeSums = append(primeSums, psum)
}
}
 
for i := 0; i < len(primeSums); i++ {
ix := sort.SearchInts(compSums, primeSums[i])
if ix < len(compSums) && compSums[ix] == primeSums[i] {
cps := rcu.Commatize(primeSums[i])
fmt.Printf("%21s - %12s prime sum, %12s composite sum\n", cps, ord(i+1), ord(ix+1))
}
}
}</lang>
 
{{out}}
<pre>
10 - 3rd prime sum, 2nd composite sum
1,988 - 33rd prime sum, 51st composite sum
14,697 - 80th prime sum, 147th composite sum
83,292 - 175th prime sum, 361st composite sum
1,503,397 - 660th prime sum, 1,582nd composite sum
18,859,052 - 2,143rd prime sum, 5,699th composite sum
93,952,013 - 4,556th prime sum, 12,821st composite sum
89,171,409,882 - 118,785th prime sum, 403,341st composite sum
9,646,383,703,961 - 1,131,142nd prime sum, 4,229,425th composite sum
209,456,854,921,713 - 5,012,372nd prime sum, 19,786,181st composite sum
3,950,430,820,867,201 - 20,840,220th prime sum, 86,192,660th composite sum
</pre>
 
=={{header|J}}==
Brute force seems fast enough for this task
9,476

edits