| Bill Allombert on Sun, 27 Nov 2022 12:58:03 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: A071521(n) |
On Sun, Nov 27, 2022 at 11:21:14AM +0100, Karim Belabas wrote:
> Hi,
>
> I didn't check the definition of A071521 in OEIS but I guess the
> problem is the unexpected (if one is used to C) semantic of the 'a op= b'
> operator in PARI/GP, whose value is A = a op b (and not 'a' !).
The following C program print 5 , not 1:
#include <stdio.h>
int main(void)
{
long a = 1, b;
b = a*=5;
printf("%ld\n",b);
return 0;
}
(all PARI/GP versions also return 5).
> A071521(n)= my(t=1);sum(k=1,logint(n,3),logint(n\t*=3,2)+1)
>
> when k = 1, we set t = 3 and compute logint(n \ 3, 2), where it was probably
> expected to compute logint(n \ 1, 2). If so, a corrected version would be
>
> A071521bis(n) = my(t=1/3); sum(k=1,logint(n,3),logint(n\t*=3,2)+1) + 1;
Please rather use semicolon, this is perfectly legal in sum, and cleaner.
A071521bis(n) = my(t=1/3); sum(k=1,logint(n,3),t*=3;logint(n\t,2)+1) + 1;
Generaly, using '=' or 'op=' inside a function/operator argument is a bad idea,
because this disables the copy optimizer:
\g1
? A071521bis(n) = my(t=1/3); sum(k=1,logint(n,3),logint(n\t*=3,2)+1) + 1;
*** Warning: compiler generates copy for `n'.
Cheers,
Bill