And, that said, after playing with this, lcmseq 100000x seems to be
significantly faster than >./&.(_&q:) 1+i. 100000x (at least on this
machine).

FYI,

-- 
Raul

P.S. if you are reading this in a context where the rest of this
thread is not available, the definition of lcmseq was:

lcmseq=: 3 : 0
  primes=. i.&.(p:inv) y
  maxsq=. 1+primes I.%:y
  */primes^x:1>.(#primes){.<.(maxsq{.primes)^.y
)

On Mon, Mar 11, 2019 at 10:08 AM Raul Miller <rauldmil...@gmail.com> wrote:
>
> Wasn’t thinking clearly though because the _ q: representation is much 
> nicer...
>
> Sorry about the noise...
>
> —
> Raul
>
> On Monday, March 11, 2019, Raul Miller <rauldmil...@gmail.com> wrote:
>>
>> __ q: I meant..
>>
>> Thanks,
>>
>> —
>> Raul
>>
>> On Monday, March 11, 2019, Raul Miller <rauldmil...@gmail.com> wrote:
>>>
>>> That’s a good approach.
>>>
>>> The _ q: representation is really nice for this task.
>>>
>>> Thanks,
>>>
>>> —
>>> Raul
>>>
>>> On Monday, March 11, 2019, Eugene Nonko <eno...@gmail.com> wrote:
>>>>
>>>> Here's the solution I ended up using:
>>>>
>>>> _&q:^:_1 >./ _ q: >: i. 10000x
>>>>
>>>> Just factorize to prime exponents representation, find maximums and convert
>>>> back from prime exponent representation.
>>>>
>>>> On Sun, Mar 10, 2019 at 2:35 PM Raul Miller <rauldmil...@gmail.com> wrote:
>>>>
>>>> > J's extended precision integer implementation is part of it. But
>>>> > floating point numbers don't really work for this kind of problem for
>>>> > anything longer than i.11
>>>> >
>>>> > But, also, I imagine a part of this also might be that Haskell has
>>>> > optimizations which improve performance of this kind of problem, which
>>>> > we don't have in J.
>>>> >
>>>> > Here's a J approach that gets the solution to this kind of problem a bit
>>>> > faster:
>>>> >
>>>> > lcmseq=:3 :0
>>>> >   primes=. i.&.(p:inv) y
>>>> >   maxsq=. 1+primes I.%:y
>>>> >   */primes^x:1>.(#primes){.<.(maxsq{.primes)^.y
>>>> > )
>>>> >
>>>> >    lcmseq 100000x
>>>> >
>>>> > 6952838362417071970003075865264183883398742917680351135360275375615041442175021237506257986828602047763612877697876454892733660081058707575359683162985199273472095475166897891861381578830560627099383483382709560516260628624180504874681127372319705939469099...
>>>> >    6!:2'lcmseq 100000x'
>>>> > 0.398073
>>>> >
>>>> > I hope this helps,
>>>> >
>>>> > --
>>>> > Raul
>>>> >
>>>> > --
>>>> > Raul
>>>> >
>>>> > On Sun, Mar 10, 2019 at 5:10 PM james faure <james.fa...@epitech.eu>
>>>> > wrote:
>>>> > >
>>>> > > 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
>>>> > ----------------------------------------------------------------------
>>>> > For information about J forums see http://www.jsoftware.com/forums.htm
>>>> ----------------------------------------------------------------------
>>>> 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