On Thu, Jan 28, 2010 at 7:11 AM, Aai <[email protected]> wrote:
> fact 3: The sigma test. n is a Zumkeller number if and only if
> (sigma(n)-2n)/2 is either zero or is a sum of distinct positive factors
> of n excluding n itself.
What definition of sigma are you using here?
I can reverse engineer your code, but that will take a bit
of time.
> divs=: 13 :'\:~ , > */&>/(^ i.@>:)&.>/__ q: y'
This can be simplified slightly:
divs=: 13 :'\:~ , */&>/(^ i.@>:)&.>/__ q: y'
> [1] with this kind of code Haskell seems much faster. Excerpt
>
> ....
>
> sigmaTest 0 _ = True
> sigmaTest _ [] = False
> sigmaTest n (f:fs)
> | f > n = sigmaTest n fs
> | otherwise = sigmaTest (n-f) fs || sigmaTest n fs
Here is a literal translation of that into J:
sigmaTest=: 4 :0
if. 0=x do.1 return.end.
if. 0=#y do.0 return.end.
f=.{.y
fs=.}.y
if. x<f do. x sigmaTest fs return.end.
if. (x-f) sigmaTest fs do.1 return.end.
x sigmaTest fs
)
With this definition, and
zumkeller =: 3 : 0"0
s=. +/ fs=. divs y
if. (2|s) +. s < +: y do. 0 else.
(s&-&.+:y) sigmaTest fs end.
)
zumkeller 80010
1
FYI,
--
Raul
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm