It occurs to me that (1r3) < (NrD) < (1r2)
can be re-written as (D < 3*N) *. (2*N) < D NB. for N&D>0 On Mon, Oct 10, 2011 at 9:39 AM, Raul Miller <rauldmil...@gmail.com> wrote: > One approach which should help with efficiency would be to find > bounding numerators (min and max) for each denominator, and then > generate the numerators between the bounds and eliminate duplicate > fractions. > > And, if that was too slow, I might be tempted to delve into factoring > my denominators (for example, when n and 2n are both denominators my > above approach would be doing duplicate work). But this gets into a > lot of complexity (and we also have a bound which is arbitrary which > must be handled here), and complexity has its own computational costs. > > -- > Raul > > On Mon, Oct 10, 2011 at 8:59 AM, Nick Simicich <simic...@gmail.com> wrote: > > I looked u faery cycles when I first cracked the forum, then tried > coding > > an algorithm. I coded a verb and by the time I got to my fourth or fifth > > recursin it had slowed. By 10-12 it was painful and I still had a long > way > > to go to 12000. > > > > In termsof how, the code I posted made rationals of all possible > numerators > > and denominators, and counted those that were not reduced when examined. > I > > was wondering if it was possible to code that both tacitly and > efficiently > > for order 12000 > > > > > > On Mon, Oct 10, 2011 at 5:04 AM, Mike Day <mike_liz....@tiscali.co.uk > >wrote: > > > >> I thought I'd check back and see how I solved this: but there's no > >> trace in my > >> saved APL or J files, so I suppose I must have done a brute-force > >> one-liner on > >> the original, smaller problem. > >> > >> So I've just had another look, and today's pretty naive solution works > >> in about > >> 2 seconds and about 200 kB on my 2GB laptop; it's order O(n^2), so > doesn't > >> scale well, but is fine for the size of problem given. > >> > >> (I still think Problem 289, "Eulerian Cycles", is the hardest of the > lot! > >> see http://projecteuler.net/problem=289 > >> I haven't yet solved it but I'm _not_ looking for spoilers. Perhaps it > >> needs what > >> Crossword Solvers call the PDM, the "Penny Drop Moment." Anyway, that's > >> another topic.) > >> > >> Mike > >> > >> On 10/10/2011 12:56 AM, Nick Simicich wrote: > >> > They increased the program space in Euler 73 to up to 12000 fractions. > >> > Euler 73 requires that you determine how many exclusive numerators > and > >> > denominators there are between 1r3 and 1r2 given that the numerators > and > >> > denominators can be up to 12000. > >> > > >> > I'm trying to do this in limited space on a 32 bit netbook with not > too > >> much > >> > extra memory, 2 gig total. > >> > > >> > Read about it here. http://projecteuler.net/problem=73 > >> > > >> > The sample space they give is up to 8. This makes it clear that I > can't > >> > just say ~. (>:1.8)%8, it has to be more like > >> > > >> > #~.(#~ (>&1r3 *.<&1r2)),%/~>:i.8 > >> > > >> > That works perfectly for 8 and 12, and when you try it with 10000 it > runs > >> > out of memory. With 12000 it gives a "limit error". I tried breaking > the > >> > problem into smaller tables, and it fails, out of memory when I try to > >> > combine tables and nub them. > >> > > >> > I finally decided I could not keep separate tables, and looked at a 16 > by > >> 16 > >> > table to get ideas. When I looked at (* (<&1r2 *.>&1r3))%/~>:i.16x I > >> > didn't see anything, but when I looked at |:(* (<&1r2 > *.>&1r3))%/~>:i.16x > >> I > >> > finally realized that any fraction that was reduced would come up > >> somewhere > >> > else. > >> > > >> > That led to this program: > >> > > >> > e73a =: verb define > >> > count =. 0 > >> > for_i.>:i. x: y do. > >> > j=.<.i%3x > >> > count =. count + +/i = {:"_1 ]2 x: (#~ (>&1r3 *.<&1r2)) > >> > i%~j+>:i.((<.i%2x)-j) > >> > end. > >> > ) > >> > > >> > Essentially, I loop over 1<: i<: y where y is 8 or 16 for testing, and > >> > 12000 for the "final answer" > >> > > >> > It builds a vector where the numbers in the vector are all extended > >> > fractions, and the numerator is between about a third and a half of > the > >> > denominator. Then it trims that vector so that the survivors are > >> greater > >> > than 1/3 and less than 1/2. > >> > > >> > Finally, it looks at the denominators and counts all of the fractions > >> that > >> > were not reduced. > >> > > >> > I took a couple of half hearted attempts at making it into a one > >> liner,and I > >> > could not figure out how to. > >> > > >> > What stops me is that, well, I would have to assign the number to a > >> variable > >> > before using it in the expression. I could unfactor j and so forth, > but, > >> > well, if someone could point me to an online example, or explain, I'd > >> > appreciate it. > >> > > >> > I've seen the item in the forum that applies the method I thought > about > >> > using, but they fit it into 32 bits: > >> > > >> > $~.;(<@#~>&(%3) *.<&0.5)@:%"0 1/~>:@i.10000 > >> > > >> > Now > >> > > >> > $~.;(<@#~>&(%3) *.<&0.5)@:%"0 1/~>:@i.12000 > >> > > >> > So far as I see it, well, I didn't understand how the "0 1 part > worked, > >> then > >> > I tried this expression: > >> > > >> > ;"0 1/~>:@i.16 > >> > > >> > So if I wanted to do a lot of unneeded arithmetic, I could rewrite my > >> deal > >> > to use this to generate the half of the stuff I didn't care about. But > >> then > >> > I'd have to somehow figure out how to put the original denominator > into > >> the > >> > boxes at the head, say. Instead of everything by everything, you only > get > >> > n(m max) by 1..m. But it is not at all clear whether that would have > >> worked > >> > for me, as I would have had to stash the original denominator or maybe > >> use > >> > the greatest denominator, if that worked. > >> > > >> > > >> > - > >> > Of course I can ride in the carpool lane, officer. Jesus is my > constant > >> > companion. > >> > ---------------------------------------------------------------------- > >> > For information about J forums see > http://www.jsoftware.com/forums.htm > >> > > >> > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > > > > > > > -- > > Of course I can ride in the carpool lane, officer. Jesus is my constant > > companion. > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > -- Devon McCormick, CFA ^me^ at acm. org is my preferred e-mail ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm