Perl: the Markov chain saw PerlMonks

### Re: Converting a Number into a Radical

by syphilis (Chancellor)
 on Dec 18, 2013 at 05:50 UTC ( #1067593=note: print w/replies, xml ) Need Help??

I gather we're concerned only with square roots of integers and that, for example, if the answer is sqrt(18), you want to see it presented as 3 x sqrt(2) instead of simply sqrt(18).
To achieve this you'll first want to factorise the integer - you could use something like Math::Factor::XS or Math::Prime::Util.

To stick with the above example, 18 factorises to the primes 2,3,3 - multiply those primes together and you end up with 18.
Notice that the "3" occurs twice - hence you can write the solution as 3 * sqrt(2).
For sqrt(1050) - the prime factors are 2,3,5,5,7, with the "5" occurring twice, and the solution is therefore:
```5 * sqrt(2 * 3 * 7) = 5 * sqrt(42)
That's essentially how it's done - I don't know if there's a module that does it all for you, or whether you'll have to program a good portion of it yourself. (Perhaps Math::NumSeq might also have something to offer.)

Cheers,
Rob

Replies are listed 'Best First'.
Re^2: Converting a Number into a Radical
by slinky773 (Sexton) on Dec 18, 2013 at 08:26 UTC
Thanks, Rob. That actually really helps.
Re^2: Converting a Number into a Radical
by hdb (Prior) on Dec 20, 2013 at 10:25 UTC

I could not resist to write it out:

```use strict;
use warnings;
use Math::Factor::XS 'prime_factors';

my \$n = shift;
( \$n and \$n > 0 and \$n == int \$n ) or die "Need positive integer as in
+put!\n";

my %p;
\$p{\$_}++ for prime_factors( \$n );

\$radical *= \$_ for grep { \$p{\$_}%2 } keys %p;
print "sqrt( \$n ) = ", sqrt( \$n/\$radical ), " * sqrt( \$radical )\n";

What I was missing is a product function, like sum from List::Util. There is one in the replacement List::Util that comes with Scalar::Util but that means overwriting the standard module which makes me feel uncomfortable.

Re^2: Converting a Number into a Radical
by Bloodnok (Vicar) on Dec 19, 2013 at 13:49 UTC
Awesome, syphilis - I wish it were possible to vote it up by more than than one.

A user level that continues to overstate my experience :-))

Create A New User
Node Status?
node history
Node Type: note [id://1067593]
help
Chatterbox?
 [zentara]: marto arn't those NSA secrets? :-) [marto]: not if you keep telling people :P [zentara]: I had to disable hyperthreading on my machine because of that. [Discipulus]: thanks marto but... at the moment this seems a bit beyond my faculties.. ;=) [zentara]: a thread goes into a wait state after emitting a wait to all other threads. It locks up a machine completely. [marto]: if you mean the recent hyperthreading bug, I don't think that's NSA related? [zentara]: s/thread/cpu/ [Discipulus]: these opcodes mentioned in the wiki pages are the same opcode perl is translated into? or is just the same term but in different fields?

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (11)
As of 2017-07-28 12:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
I came, I saw, I ...

Results (428 votes). Check out past polls.