Suppose we have a sequence of prime sums, where each term Pn is the sum of the first n primes.

P = (2), (2 + 3), (2 + 3 + 5), (2 + 3 + 5 + 7), (2 + 3 + 5 + 7 + 11), ...

P = 2, 5, 10, 17, 28, etc.



Further; suppose we have a sequence of composite sums, where each term Cm is the sum of the first m composites.

C = (4), (4 + 6), (4 + 6 + 8), (4 + 6 + 8 + 9), (4 + 6 + 8 + 9 + 10), ...

C = 4, 10, 18, 27, 37, etc.



Notice that the third term of P; P3 (10) is equal to the second term of C; C2 (10);



Task
 Find and display the indices (n, m) and value of at least the first 6 terms of the sequence of numbers that are both the sum of the first n primes and the first m composites.


See also
 OEIS:A007504 - Sum of the first n primes
 OEIS:A053767 - Sum of first n composite numbers
 OEIS:A294174 - Numbers that can be expressed both as the sum of first primes and as the sum of first composites


using Primes
 
function getsequencematches(N, masksize = 1_000_000_000)
    pmask = primesmask(masksize)
    found, psum, csum, pindex, cindex, pcount, ccount = 0, 2, 4, 2, 4, 1, 1
    incrementpsum() = (pindex += 1; if pmask[pindex] psum += pindex; pcount += 1 end)
    incrementcsum() = (cindex += 1; if !pmask[cindex] csum += cindex; ccount += 1 end)
    while found < N
        while psum < csum
            pindex >= masksize && return
            incrementpsum()
        end
        if psum == csum
            println("Primes up to $pindex at position $pcount and composites up to $cindex at position $ccount sum to $psum.")
            found += 1
            while psum == csum
                incrementpsum()
                incrementcsum()
            end
        end
        while csum < psum
            incrementcsum()
        end
    end
end
 
@time getsequencematches(11)
 