zumkeller3 =: 3 : 0 " 0
 s=: y-~-:{. fs=: +/\. d=: divs y
 if. (1|s) +. s < 0 do. 0
 else. s sigmat3 d,:fs end.
)

sigmat3=: 4 : 0 
 if. 0=x do.1 return.end.
 if. 0<# y ([:~.@, (([ - {...@] #~ (<:{:)*.(>:{.)))"0 _)~^:([: *./
-.@(e.,)~)^:_ x do. 1
 else. 0 end.
)

   ('zk';'zk2';'zk3')dspl rnkng scores 'zumkeller 6+i.4995';'zumkeller2
6+i.4995';'zumkeller3 6+i.4995'
+----+----+-----+-----+----+
|verb|rank|et*sz|time |size|
+----+----+-----+-----+----+
|zk  | 2  |14.84|12.32|1.20|
+----+----+-----+-----+----+
|zk2 | 1  |13.41| 3.62|3.70|
+----+----+-----+-----+----+
|zk3 | 0  | 1.00| 1.00|1.00|
+----+----+-----+-----+----+

    2-:/\(zumkeller 6+i.4995),(zumkeller2 6+i.4995),:zumkeller3 6+i.4995
1 1

zumkeller3 is faster and leaner for relative small values, but has a much
larger footprint for high numbers:

   ('zk2';'zk3')dspl rnkng scores 'zumkeller2 1e6+i.100';'zumkeller3
1e6+i.100'
+----+----+-----+-----+-----+
|verb|rank|et*sz|time |size |
+----+----+-----+-----+-----+
|zk2 | 0  |1.00 |15.21| 1.00|
+----+----+-----+-----+-----+
|zk3 | 1  |2.10 | 1.00|31.87|
+----+----+-----+-----+-----+

but at least one can determine

   ts'zumkeller3 1e6+i.1000'
0.18818815 1190400

and even

   ts'zumkeller3 1e9+i.1000'
3.1523912 69530112


R.E. Boss

ps. if the last 2 lines of sigmat3 are replaced by

  *# y ([:~.@, (([ - {...@] #~ (<:{:)*.(>:{.)))"0 _)~^:([: *./ -.@(e.,)~)^:_ x

the process takes 4 times as much space!

   ('zk3';'zk3c')dspl rnkng scores 'zumkeller3 6+i.4995';'zumkeller3c
6+i.4995'
+----+----+-----+----+----+
|verb|rank|et*sz|time|size|
+----+----+-----+----+----+
|zk3 | 0  |1.00 |1.00|1.00|
+----+----+-----+----+----+
|zk3c| 1  |4.16 |1.00|4.14|
+----+----+-----+----+----+

but only for Small values

   ('zk3';'zk3c')dspl rnkng scores 'zumkeller3 1e6+i.1000';'zumkeller3c
1e6+i.1000'
+----+----+-----+----+----+
|verb|rank|et*sz|time|size|
+----+----+-----+----+----+
|zk3 | 0  |1.00 |1.00|1.00|
+----+----+-----+----+----+
|zk3c| 1  |1.01 |1.00|1.01|
+----+----+-----+----+----+



> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Aai
> Verzonden: vrijdag 29 januari 2010 11:18
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] Zumkeller numbers
> 
> There is some speed to gain at the cost of space by making the sigma
> test tacit.
> 
>    ts '(#~zumkeller) 6+i.4995'
> 4.648012 143936
> 
>    ts '(#~zumkeller2) 6+i.4995'
> 1.412875 441408
> 
>    ((#~zumkeller)-:(#~zumkeller2)) 6+i.4995
> 1
> 
> 
> =========== Code ================
> 
> 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
> )
> 
> zumkeller =: 3 : 0 " 0
>   s=. +/ fs=. divs y
>   if. (2|s) +. s < +: y do. 0
>   else. fs sigmaTest~ s&-&.+:y end.
> )
> 
> sigmat =: [(($:}.)`1:@.((-{.)$:}...@]))`0:@.(0...@])`1:@.(0=[)>:#]
> 
> zumkeller2 =: 3 : 0 " 0
>   s=. +/ fs=. divs y
>   if. (2|s) +. s < +: y do. 0
>   else. fs sigmat~ s&-&.+:y end.
> )
> 
> 
> 
> --
> Met vriendelijke groet,
> =@@i
> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

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

Reply via email to