Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   Quick n-th Square of BigInteger (http://www.velocityreviews.com/forums/t946904-quick-n-th-square-of-biginteger.html)

Jan Burse 06-08-2012 07:03 PM

Quick n-th Square of BigInteger
 
Dear All,

What is your favorite algorithm to compute the n-th Square of
a BigInteger, i.e.

Given: x, n
Compute: y = max { z | z^n =< x }

Bye

Gene Wirchenko 06-08-2012 08:34 PM

Re: Quick n-th Square of BigInteger
 
On Fri, 08 Jun 2012 21:03:56 +0200, Jan Burse <janburse@fastmail.fm>
wrote:

>Dear All,
>
>What is your favorite algorithm to compute the n-th Square of
>a BigInteger, i.e.
>
> Given: x, n
> Compute: y = max { z | z^n =< x }


Do you mean the integer part of the nth *root* of z given integer
x and n?

I do not have a favourite or even an algorithm. If I had to come
up with something, I would probably try a first approximation with
logarithms.

Sincerely,

Gene Wirchenko

Jan Burse 06-08-2012 08:36 PM

Quick n-th Root of BigInteger
 
Gene Wirchenko schrieb:
> On Fri, 08 Jun 2012 21:03:56 +0200, Jan Burse <janburse@fastmail.fm>
> wrote:
>
>> Dear All,
>>
>> What is your favorite algorithm to compute the n-th Square of
>> a BigInteger, i.e.
>>
>> Given: x, n
>> Compute: y = max { z | z^n =< x }

>
> Do you mean the integer part of the nth *root* of z given integer
> x and n?
>
> I do not have a favourite or even an algorithm. If I had to come
> up with something, I would probably try a first approximation with
> logarithms.
>
> Sincerely,
>
> Gene Wirchenko
>


Sorry, yes root, and z integer.

markspace 06-08-2012 08:55 PM

Re: Quick n-th Root of BigInteger
 
On 6/8/2012 1:36 PM, Jan Burse wrote:
> Gene Wirchenko schrieb:
>> On Fri, 08 Jun 2012 21:03:56 +0200, Jan Burse <janburse@fastmail.fm>
>> wrote:
>>
>>> Dear All,
>>>
>>> What is your favorite algorithm to compute the n-th Square of
>>> a BigInteger, i.e.
>>>
>>> Given: x, n
>>> Compute: y = max { z | z^n =< x }

>>
>> Do you mean the integer part of the nth *root* of z given integer
>> x and n?


> Sorry, yes root, and z integer.



Positive integers? Do you want the complex roots too? ;-) You ask big
questions Jan, but I think you need to ask them a little more thoughtfully.

I'm confused about the max, the z |, and the =< x. Care to explain
what those signify in your question? If you want something besides the
real, positive nth root of A=z^n, what do you want? I think "nth root
of A" is the correct phrasing, which leads to the wonder what the other
mathematical verbiage signifies.


Jan Burse 06-08-2012 09:00 PM

Re: Quick n-th Square of BigInteger
 
Jan Burse schrieb:
> Dear All,
>
> What is your favorite algorithm to compute the n-th Square of
> a BigInteger, i.e.
>
> Given: x, n
> Compute: y = max { z | z^n =< x }
>
> Bye


Clarification:

Given: x BigInteger positive non-zero, n int positive non-zero

Compute: y BigInteger = max { z BigInteger | z^n =< x }

(In words: y is the biggest BigInteger z such that
z raised to the power of n is less or equal x)

(Mathematically this is would be floor(root(x,n)))

Bye

Eric Sosman 06-08-2012 09:04 PM

Re: Quick n-th Square of BigInteger
 
On 6/8/2012 3:03 PM, Jan Burse wrote:
> Dear All,
>
> What is your favorite algorithm to compute the n-th Square of
> a BigInteger, i.e.
>
> Given: x, n
> Compute: y = max { z | z^n =< x }


(I'm assuming you mean n'th root, which is what your final
line seems to imply.)

It's not something I've found a need to do, so I have no
"favorite" algorithm. For positive `x' I think I'd start
by observing that

x.bitCount()-1 <= lg(x) < x.bitCount()

hence the lg() of the desired root is between

floor((x.bitCount()-1)/n) <= lg(root) < ceil(x.bitCount()/n)

From this you can get lower and upper bounds on the root itself,
something like (just typed in free-hand)

BigInteger lo = BigInteger.ONE.shiftLeft(
Math.floor((x.bitCount()-1)/n));
BitInteger hi = BigInteger.ONE.shiftLeft(
Math.ceil(x.bitCount()/n));

.... and then do a binary search between those extrema. (Looks like
they'd differ by a factor of two usually, maybe a factor of four
occasionally -- but I might be wrong about that.)

Simplifications might be possible if `n' is known to be an
integer.

For negative `x' and odd integer `n' you could find the bounds
for -x, negate and interchange them, and then do the same binary
search.

For negative `x' and `n' even or non-integer, I think you're
out of luck.

--
Eric Sosman
esosman@ieee-dot-org.invalid

glen herrmannsfeldt 06-08-2012 09:06 PM

Re: Quick n-th Root of BigInteger
 
markspace <-@.> wrote:
(snip)
>>> On Fri, 08 Jun 2012 21:03:56 +0200, Jan Burse <janburse@fastmail.fm>


>>>> What is your favorite algorithm to compute the n-th Square of
>>>> a BigInteger, i.e.


>>>> Given: x, n
>>>> Compute: y = max { z | z^n =< x }


(snip)
>> Sorry, yes root, and z integer.


> Positive integers? Do you want the complex roots too? ;-)
> You ask big questions Jan, but I think you need to ask them
> a little more thoughtfully.


I will guess that the OP isn't a native English speaker, and
is not translating so well.

I had to look it up as I didn't know, .fm seems to be Micronesia.

It looks like he wants the nth root rounded down to the next
integer value.

I do remember when first learning Fortran wondering why no
ISQRT function.

One possibility is to do exactly as written, binary search
for the largest z such that z**n <= x. (No exclusive or operators
are needed here.)

-- glen

Jan Burse 06-08-2012 09:19 PM

Re: Quick n-th Square of BigInteger
 
Eric Sosman schrieb:
> ... and then do a binary search between those extrema. (Looks like
> they'd differ by a factor of two usually, maybe a factor of four
> occasionally -- but I might be wrong about that.)


Binary search would use (x.bitCount()-1)/n steps in the
extrem, and in each step calculating pow(). Is this
effective?


Jan Burse 06-08-2012 09:21 PM

Re: Quick n-th Root of BigInteger
 
glen herrmannsfeldt schrieb:
> I will guess that the OP isn't a native English speaker, and
> is not translating so well. I had to look it up as I didn't know,
> .fm seems to be Micronesia.


Ha Ha

fastmail.fm = messagingengine.com


Jan Burse 06-08-2012 09:34 PM

Re: Quick n-th Root of BigInteger
 
markspace schrieb:
> I'm confused about the max, the z |, and the =< x.


For those who don't know, there exists a set builder notation:

http://en.wikipedia.org/wiki/Set-bui...ion#Z_notation

max is then a higher order function from a set to an element.

Forgot where this is taught, in elementary school?

Bye


All times are GMT. The time now is 07:57 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57