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