1period(D) =
2{ my(u,v,j,r,s);
3
4 if (type(D) != "t_INT" || D < 2, return(-1));
5 u = sqrtint(D, &v); \\ v = D-u^2;
6 if (!v, return(0));
7 s = v;
8 r = u; j = 0;
9 until (u == r && v == s,
10 u = (r+u)\v * v - u;
11 v = (D-u^2)\v; j++;
12 ); j;
13}
14