| LoÃc Grenià on Thu, 26 Sep 2013 14:14:01 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: function result vector ? |
2013/9/26 Christian Hoffmann <c-w.hoffmann@sunrise.ch>:
> I have the following problem with a vector as a function result:
>
> (Trying to split a prime of form 4k+1 into two squares)
>
> twosquares(n) = \
> local (r, p, q);\
> {\
> r=floor(sqrt(n));\
> v=vector(2);\
> v=[-1,0];\
> forstep(p=r,0,-1, if(issquare(n-p^2,&q),{v=[p,q]; print(v); break}));\
> \\forstep(p=r,0,-1, if(issquare(n-p^2,&q), break;));\
> v=[p,q];\
> print(p." ",q)
> return(v)
> }
>
> twosquares(17)
> 0 1
> %50 = [0, 1]
>
> instead of [4, 1] . ( 17 = 4^2 + 1^2 )
First of all with which version of pari/gp are you using this script ?
It does not work with any recent version (embedded braces are
forbidden). Moreover the backslashes inside the braces are
useless.
Inside the loop the variable p is local to the loop and does not
modify the external p. Your script is equivalent to
twosquares(n) =
{
local (r, p, q);
r=floor(sqrt(n));
v=[-1,0];
forstep(p2=r,0,-1, ifissquare(n-p2^2,&q),{v=[p2,q]; print(v); break));
v=[p,q];
print(p," ",q);
return(v)
}
It is clearer that the p you are using is not the one you thought.
> Christian
>
> PS: Is there a rigorous definition of Pari syntax?
Yes, in the documentation, more precisely in chapter 2 of the
users manual. You moreover have a tutorial to get you started.