That, I suspect, can be blamed mostly on the abysmally slow extended precision 
integers in J, and the fact that *. must manipulate these extended precision 
integers more often than other verbs.

Indeed, If you remove the 'x', it runs extremely fast.
________________________________
From: Programming <programming-boun...@forums.jsoftware.com> on behalf of 
Eugene Nonko <eno...@gmail.com>
Sent: Sunday, March 10, 2019 9:00 PM
To: programm...@jsoftware.com
Subject: [Jprogramming] LCM performance

I need to find the smallest number that divides all numbers from 1 to n.
The solution, of course is this:

*./ >: i. n

What I don't understand is why this solution seems to scale so poorly:

   6!:2 '*./ >: i.10000x'
0.326128
   6!:2 '*./ >: i.11000x'
1.00384
   6!:2 '*./ >: i.12000x'
4.133
   6!:2 '*./ >: i.13000x'
11.8082

When I perform similar calculation in Haskell it produces result in
negligible time, even when n = 100,000.

λ: foldr1 lcm [1 .. 100000]
695283836241707197000307586...

If I use a verb other than *. it runs very quickly, as expected.

What's so special about LCM?

Thanks,
Eugene
----------------------------------------------------------------------
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