Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^4: OT: Finding Factor Closest To Square Root

by QM (Parson)
on Feb 20, 2005 at 04:53 UTC ( [id://432831]=note: print w/replies, xml ) Need Help??


in reply to Re^3: OT: Finding Factor Closest To Square Root
in thread OT: Finding Factor Closest To Square Root

For your example, that would be 2 * sqrt(2*5) * 5, which turns out to be exactly the correct answer, 31.622..
I don't need the exact square root, but the largest (possibly composite) integer factor less than or equal to the square root.

Cheers,

-QM
--
Quantum Mechanics: The dreams stuff is made of

  • Comment on Re^4: OT: Finding Factor Closest To Square Root

Replies are listed 'Best First'.
Re^5: OT: Finding Factor Closest To Square Root
by talexb (Chancellor) on Feb 21, 2005 at 11:46 UTC

    Needless to say, but I'll say it anyway, a fascinating problem. Exactly the kind of thing that my Dad eats for breakfast (retired actuary and all that).

    After some thought, it seems clear that this is a tough nut to crack. If you start with a sorted list of factors, largest to smallest, and multiply values together, the solution is 25. If you drop the first value, you end up with 20. I can't prove it (not at 0630, anyway), but I expect there are cases where the solution is the product of the first, second and last factors.

    In the end, I think the best way to find out the answer is to figure out the integer that's closest to the square root, then go backwards to find the largest number made up of the factors. Assuming you don't want to actually calculate the suqare root, the first part of that can be a straightforward binary search. The second part is where it gets interesting .. you have to find the combination of factors whose product is closest to the approximate square root value you've determined.

    And that sounds an awful lot like re-starting the original problem. Ugh.

    Alex / talexb / Toronto

    "Groklaw is the open-source mentality applied to legal research" ~ Linus Torvalds

      This discussion and my own (preliminary) benchmarking results have led me to rethink a few things about my real problem.

      For instance, when computing F(n), we can make use of the addition formula to break n into 2 pieces:

      F(n) = F(i+j) = F(i-1)*F(j) + F(i)*F(j+1)
      Then:
      j = k**2 = int(sqrt(n)) i = n - j F(n) = F(i+j) = F(i+k**2)
      which we can compute using the first formula above and
      F(k**2) = (F(k-1)+F(k+1))*F(k*(k-1)) - ((-1)**k)*F(k*(k-2))
      It remains to be seen whether all of this extra work buys anything.

      -QM
      --
      Quantum Mechanics: The dreams stuff is made of

        If you haven't already installed Math::Pari for doing your factorisation, do so now. I knew it would be quicker than Math::Big, but you have to see for yourself how much faster it is to believe it. It's not just the C -v- Perl difference, it has a batch of extremely clever algorithms in there, and intelligently chooses the most appropriate one.

        The only bug-bear I have with Math::Pari so far, is the lack of a (as far as I can see), function for flattening its two dimensional vectors. The results from factorint() come back as an AoA, where the first nested array conatins the factors, and the second contains the counts, which makes them a tad awkward to maniulate.


        Examine what is said, not who speaks.
        Silence betokens consent.
        Love the truth but pardon error.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://432831]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (8)
As of 2024-04-19 08:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found