Raul Miller <rauldmiller <at> gmail.com> writes:

> 
> On 5/22/07, Terrence Brannon <metaperl.j <at> gmail.com> wrote:
> > Concretely, so you can play with things, I need to call
> >
> > (((A process_prime 2) process_prime 3) process_prime 4) ... process_prime 27
> 
> You mean like this?
>    A ( [: > process_prime~&.>/ <"0 @ |. @ ] , < @ [) 2}.i.28

Once again, you have completely out-classed me. I will need to do some serious
head-scratching before I understand what you are doing.

> 
> (I've not studied the rest of your code.  And, for that matter, I don't
> really understand your goals for that code.)
> 


My goals are to perform a naive implementation of the Sieve of Eratosthenes.
Naive in 2 senses: (1) me the naive novice newbie J'er (2) non-optimal so as to
satisfy the Benchmark Gods of Alioth :)

here is the algorithm - http://www.nist.gov/dads/HTML/sieve.html  

And I am at the step where I consider 2 prime but mark all of its multiples as
non-prime, then take that marked array and consider 3 prime but mark all of its
multiples as non-prime, then take that marked array and consider 5 prime but
mark all of its multiples as non-prime.

code follows -

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