# ShareMyScreen/ProjectEuler/0010

Jump to navigation
Jump to search

J has a primitive for working with primes `p:`, which trivializes this problem.

_1 p: 20e5 NB. primes below 2 million 148933 p: i. 10 NB. first ten primes 2 3 5 7 11 13 17 19 23 29 +/ p: i. _1 p: 20e5 NB. the answer 142913828922

Although my initial answer is simple, I always take the time to look through the forums after finding an answer to see if any other J enthusiasts came up with something else. In this case, it was found that `&.` could be used remove the last `p:` by leveraging the fact that `_1&p:` and `p:` are inverses of each other.

NB. a look out how to invoke inverses _1 p:inv i. 5 NB. inv is a defined in the standard library and defined as ^:(_1) 2 3 5 7 11 p:inv 20e5 148933 +/ i.&.(_1&p:) 20e5 NB. the answer using Under 142913828922 +/ _1 p:inv i. _1 p: 20e5 NB. the expanded form of what Under is doing for us 142913828922

What proceeds is merely subjective.

A benefit to this, in my opinion, is that it can help simplify a tacit expression if I so chose to make one. It also allows me to utilize one of J's coolest conjunctions.

(1#._1 p:@i.@p:]) NB. uses two forks and requires an ugly space with a series of atops that uses p: twice (1#.p:@i.@(p:inv)) NB. uses one fork and needs no spaces but still requires using p: twice (1#.i.&.(_1&p:)) NB. one fork, no spaces, and one p:, plus it is marginally shorter, which would be good for code golfing