zumkeller3 is wrong, it gives false positives.
This was pointed out by =@@i in providing non-zk numbers:

   +/zumkeller3 748 7544 10184 56816 61904 62416 66928 69488 73616 85626
100962 102416
2


the next is a more correct version.

zumkeller4c =: 3 : 0 " 0        NB. line wrap!
 s=. y -~-:{. sd=. +/\. d=. divs y
 if. (1|s) +. s < 0 do.0 return.end.
 if. 0=s            do.1 return.end.
 z=. {. (d,:sd)([: |:@~.@; ({...@[ <@((- ,. ]) d #~ ])"0 1 ({:@[ >/
{...@])*.({...@[ <:/ {:@])*.(>:/&{.)))~ ^:((*./@:*...@$@])*. [: -.@(+./) ,@[ e.~
{...@])^:_ s,:y 
 if. 0<#z do. 1 else. 0 end.
)

   +/zumkeller4c 748 7544 10184 56816 61904 62416 66928 69488 73616 85626
100962 102416
0

   ('zk';'zk2';'zk4c')dspl rnkng scores 'zumkeller 6+i.4995';'zumkeller2
6+i.4995';'zumkeller4c 6+i.4995'
+----+----+-----+-----+----+
|verb|rank|et*sz|time |size|
+----+----+-----+-----+----+
|zk  | 2  |13.64|11.41|1.20|
+----+----+-----+-----+----+
|zk2 | 1  |12.55| 3.42|3.67|
+----+----+-----+-----+----+
|zk4c| 0  | 1.00| 1.00|1.00|
+----+----+-----+-----+----+

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

zk4c scales rather well:

   ('500';'2000')dspl rnkng scores 'zumkeller4c 1e6+i.500';'zumkeller4c
1e6+i.2000'
+----+----+-----+----+----+
|verb|rank|et*sz|time|size|
+----+----+-----+----+----+
|500 | 0  |1.00 |1.00|1.00|
+----+----+-----+----+----+
|2000| 1  |3.39 |3.36|1.01|
+----+----+-----+----+----+


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens R.E. Boss
> Verzonden: zondag 31 januari 2010 16:28
> Aan: 'Programming forum'
> Onderwerp: Re: [Jprogramming] Zumkeller numbers
> 
> 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|
> +----+----+-----+-----+-----+
> 


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

Reply via email to