       Re: Easiest Mathematica algorhitm needed

```On 13 Oct 2008, at 19:20, Artur wrote:

> Dear Mathematica Gurus,
> Who know which Matrhematica function uses to separate square free part
> of number.
> e.g.
> In: Table[Sqrt[n!], {n, 1, 10}]
> Out: {1, Sqrt, Sqrt, 2 Sqrt, 2 Sqrt, 12 Sqrt, 12
> Sqrt,
> 24 Sqrt, 72 Sqrt, 720 Sqrt}
> What to do to take squre-free parts:
> {1, 2, 6, 6, 30, 5, 35, 70, 70, 7}
> or square parts
> {1, 1, 1, 2, 2, 12, 12, 24, 72, 720}
> Best wishes
> Artur
>

It is a bit surprising that Sqrt does this since there is no
polynomial time algorithm for factoring the square free part of an
integer. In fact, we can implement the SquareFreePart algorithm using
FactorInteger as follows:

SquareFreePart[n_Integer?Positive] := Times @@ Power @@@ ({#[],
Mod[#[], 2]}& /@ FactorInteger[n])
and
SquarePart[n_Integer?Positive] := n/SquareFreePart[n]

SquareFreePart /@ Table[n!, {n, 1, 10}]
{1, 2, 6, 6, 30, 5, 35, 70, 70, 7}
SquarePart /@ Table[n!, {n, 1, 10}]
{1, 1, 1, 4, 4, 144, 144, 576, 5184, 518400}

I don't think there is any much more efficient way of doing this.

Andrzej Kozlowski

```

• Prev by Date: Re: Solve vs. NSolve
• Next by Date: Re: Getting rid of those deprecated Do[] loops?
• Previous by thread: Re: Easiest Mathematica algorhitm needed
• Next by thread: RE: Re: Executing external notebook