prob75(N)= { \\ call with -s 400000000 perim = 0; r = 2; fib = listcreate(N); for (i = 1, N, listput(fib,0)); while (r < N, v = r^2 / 2; fordiv(v, s, if (s <= sqrt(v), \\ this is Dickson's method to generate Pythagorean triples t = v / s; x = r + s; y = r + t; z = r + s + t; perim = x + y + z; if (perim <= N, listput(fib,fib[perim] + 1,perim); ); , break; ); ); r += 2; ); c = 0; for (i = 1, N, if (fib[i] == 1, c++); ); print (c); }