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