%I #18 Feb 11 2024 22:31:06
%S 0,0,2,12,39,95,193,355,597,943,1426,2071,2904,3977,5306,6956,8963,
%T 11370,14225,17587,21515,26053,31310,37282,44061,51785,60436,70127,
%U 80939,92952,106267,120982,137124,154841,174225,195366,218394,243457,270505,299749,331441
%N Number of obtuse triangles, distinct up to congruence, on an n X n grid (or geoboard).
%H Eric Weisstein's World of Mathematics, <a href="http://mathworld.wolfram.com/Geoboard.html">Geoboard</a>.
%H Eric Weisstein's World of Mathematics, <a href="http://mathworld.wolfram.com/ObtuseTriangle.html">Obtuse Triangle</a>.
%F a(n) = A028419(n) - A190021(n) - A189979(n).
%e For n = 3 the two obtuse triangles are:
%e *.. *..
%e *.. *..
%e .*. ..*
%p Triangles:=proc(n) local TriangleSet, i, j, k, l, A, B, C; TriangleSet:={}: for i from 0 to n do for j from 0 to n do for k from 0 to n do for l from 0 to n do A:=i^2+j^2: B:=k^2+l^2: C:=(i-k)^2+(j-l)^2: if A^2+B^2+C^2<>2*(A*B+B*C+C*A) then TriangleSet:={op(TriangleSet), sort([sqrt(A), sqrt(B), sqrt(C)])}: fi: od: od: od: od: return(TriangleSet); end:
%p IsObtuseTriangle:=proc(T) if T[1]^2+T[2]^2<T[3]^2 or T[1]^2+T[3]^2<T[2]^2 or T[2]^2+T[3]^2<T[1]^2 then true else false fi: end:
%p a:=proc(n) local TriangleSet,ObtuseTriangleSet,i; TriangleSet:=Triangles(n): ObtuseTriangleSet:={}: for i from 1 to nops(TriangleSet) do if IsObtuseTriangle(TriangleSet[i]) then ObtuseTriangleSet:={op(ObtuseTriangleSet),TriangleSet[i]} fi: od: return(nops(ObtuseTriangleSet)); end:
%Y Cf. A028419, A189979, A190021.
%Y Cf. A103428.
%K nonn
%O 1,3
%A _Martin Renner_, May 04 2011
%E a(21)-a(40) from _Martin Renner_, May 08 2011