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