Here's a way to implement the solution in a single Solve, all 960 of them. The determinant is zero if the three points you get by dropping the 1's are colinear; if they are, they lie on a diagonal, and either the solution is a right triangle or two points are coincident (i.e. no triangle). Dividing by the determinant rules out these cases.
circleRules = {r -> 5, a -> -2, b -> -1};
sols = Solve[{
((p - a)^2 + (q - b)^2 - r^2) /
Det[ {{a, b, 1},
{u, v, 1},
{s, t, 1}} ] == 0,
((s - a)^2 + (t - b)^2 - r^2) /
Det[ {{a, b, 1},
{p, q, 1},
{u, v, 1}} ] == 0,
((u - a)^2 + (v - b)^2 - r^2) /
Det[ {{a, b, 1},
{p, q, 1},
{s, t, 1}} ] == 0} /. circleRules,
{p, q, s, t, u, v}, Integers];
Here's a faster way to do the same thing:
sols2 = Solve[{(p - a)^2 + (q - b)^2 - r^2 == 0,
(s - a)^2 + (t - b)^2 - r^2 == 0,
(u - a)^2 + (v - b)^2 - r^2 == 0} /. circleRules,
{p, q, s, t, u, v}, Integers];
figs = {{p, q}, {s, t}, {u, v}} /. # & /@ sols2;
nonRtTri2 =
Pick[figs,
Unitize[Times @@ Flatten @
Minors[Transpose[#~Append~{a, b} /. circleRules]~Append~{1, 1, 1, 1},
3] & /@ figs],
1];
Consistency:
nonRtTri = {{p, q}, {s, t}, {u, v}} /. # & /@ sols;
nonRtTri == nonRtTri2
(* True *)
What they look like:
allPts = Union @ Flatten[{{p, q}, {s, t}, {u, v}} /. # & /@ sols, 1];
Graphics[{Circle[{a, b}, r] /. {r -> 5, a -> -2, b -> -1},
Polygon[{{p, q}, {s, t}, {u, v}}] /. #, Red, Point[allPts]},
ImageSize -> 80] & /@ sols;
