These are cases that can benefit from having special code for
[: *./ f   where f is a rank-0 boolean function.  [: +./ f   is a 
similarly useful phrase.



----- Original Message -----
From: John Randall <[EMAIL PROTECTED]>
Date: Thursday, October 30, 2008 16:48
Subject: Re: [Jprogramming] Miller-Rabin primality test
To: Programming forum <[email protected]>

> Roger Hui wrote:
> >> There are a lot of alternatives based on the range you want.
> >
> > Some popular ranges would be
> > y<2^31
> > y<2^32
> > y<2^63
> > y<2^64
> 
> With no code conservation, here are a couple of examples.
> 
> time=:6!:2
> huo=: <[EMAIL PROTECTED]:^:(0=2&|)^:a:  NB. halve until odd
> 
> DMR=: 3 : 0"0  NB. up to 2^32
>  h=.huo y-1
>  s=.#h
>  d=.{: h
>  for_a. (#~ y&>) 2 7 61 do.
>   c=.a y&|@^d*2 y&|@^ i.s
>   if. (1~: {. c) *. *./ (y-1)~: c do. 0 return. end.
>  end.
>  1
> )
> DMR2=: 3 : 0"0 NB. up to 2^48
>  h=.huo y-1
>  s=.#h
>  d=.{: h
>  for_a. (#~ y&>) 2 3 5 7 11 13 do.
>   c=.a y&|@^d*2 y&|@^ i.s
>   if. (1~: {. c) *. *./ (y-1)~: c do. 0 return. end.
>  end.
>  1
> )
> 
>    N=:(i.1e3)+10^12x
>    time 'DMR2 N'
> 1.05322
>    time '1&p: N'
> 1.49582
>    (DMR2-:1&p:) N
> 1
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to