Re: probable bug of "ispower" function in GP: FALSE, apologies!

"Ruud H.G. van Tol" <[email protected]>
Newsgroups gmane.comp.mathematics.pari.devel
Message-ID <[email protected]>
On 2023-01-12 13:13, Karim Belabas wrote:
> * Vincent Lefevre [2023-01-12 12:40]:
>> On 2023-01-12 12:31:09 +0100, [email protected] wrote:
>>> I misunderstood the definition of "ispower"!
>>>
>>> I wanted a function that identify directly if some integer is a 
>>> power of 2
>> I suppose that you can use something like
>>
>> ispower(64,,&n)
>>
>> and check that n is 2. But I suppose that for large numbers, this may
>> be inefficient because ispower() will not just check for powers of 2.
> Use hammingweight(N) == 1.
>
> Or v = valuation(N,2); N >> v == 1 if you need the exact power. (Will be
> a little slower.)
>

Just meant for inspiration, not as effective implementations:

is_power_of1(n,p) = my(f=factor(n)); if(1==#f~, 
if(p==f[1,1],f[1,2],-oo), +oo)

is_power_of2(n,p)= my(r=valuation(n,p)); if(n==p^r,r,+oo)


? is_power_of1(32,2)
%= 5
? is_power_of2(32,2)
%= 5

? is_power_of1(27,2)
%= -oo  /* as 2 is not even a factor */
? is_power_of2(27,2)
%= +oo

? is_power_of1(54,2)
%= +oo
? is_power_of2(54,2)
%= +oo

? is_power_of1(1,10)
%= +oo  /* BUG */
? is_power_of2(1,10)
%= 0

-- Greetings, Ruud

xxx
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.