Concretely, so you can play with things, I need to call

(((A process_prime 2) process_prime 3) process_prime 4) ... process_prime 27


multiples     =: 4 : 'y * (1 + ( i.(>. x % y)))'   NB. max multiples n
make_sieve    =: 3 : '0 (0 1) } (y+1) $ 1'
next_prime    =: prime_indices pick_prime ]
prime_indices =: I. @ [   NB. return indices in list which equal 1
pick_prime    =: I. { [   NB. dyadic fork to lookup the 
drop_le       =: 4 : '(x > y) # x'  NB. drop elements in list <= value

NB. A process_prime 2 - marks all multiples of 2 in A as non-prime
process_prime =: 4 : '0 (}: }. (((#x)-1) multiples y)) } x'

A =: make_sieve 27

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to