A046664 Erroneous version of A028419.
0, 1, 8, 29, 79, 174, 338, 597, 984, 1531, 2284, 3285, 4581, 6232, 8294, 10821, 13896
Offset: 1
This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.
For n=3 the five isosceles triangles are: **. *.* .*. ..* *.. *.. ... *.. *.. ..* ... *.. .*. ..* .*.
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: IsIsoscelesTriangle:=proc(T) if T[1]=T[2] or T[1]=T[3] or T[2]=T[3] then true else false fi: end: a:=proc(n) local TriangleSet,IsoscelesTriangleSet,i; TriangleSet:=Triangles(n): IsoscelesTriangleSet:={}: for i from 1 to nops(TriangleSet) do if IsIsoscelesTriangle(TriangleSet[i]) then IsoscelesTriangleSet:={op(IsoscelesTriangleSet),TriangleSet[i]} fi: od: return(nops(IsoscelesTriangleSet)); end:
For n=3 the four right triangles are: **. *.* *.* .*. *.. *.. ... *.. ... ... *.. .*.
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: IsRectangularTriangle:=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: a:=proc(n) local TriangleSet,RectangularTriangleSet,i; TriangleSet:=Triangles(n): RectangularTriangleSet:={}: for i from 1 to nops(TriangleSet) do if IsRectangularTriangle(TriangleSet[i]) then RectangularTriangleSet:={op(RectangularTriangleSet),TriangleSet[i]} fi: od: return(nops(RectangularTriangleSet)); end:
For n = 2 the four kinds of non-congruent triangles are the following: /. * * * . * * . . * * . . * * . * . . * \. . . . . . * .
For n = 3 the two acute triangles are: *.. .*. ..* *.. *.. ..*
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: IsAcuteTriangle:=proc(T) if T[1]^2+T[2]^2>T[3]^2 and T[1]^2+T[3]^2>T[2]^2 and T[2]^2+T[3]^2>T[1]^2 then true else false fi: end: a:=proc(n) local TriangleSet,AcuteTriangleSet,i; TriangleSet:=Triangles(n): AcuteTriangleSet:={}: for i from 1 to nops(TriangleSet) do if IsAcuteTriangle(TriangleSet[i]) then AcuteTriangleSet:={op(AcuteTriangleSet),TriangleSet[i]} fi: od: return(nops(AcuteTriangleSet)); end:
For n = 3 the two obtuse triangles are: *.. *.. *.. *.. .*. ..*
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: IsObtuseTriangle:=proc(T) if T[1]^2+T[2]^2
q[n_] := Module[{sqDist, t0, t1, t2, t3}, (*Squared distances*) sqDist = {p_,q_} :> (Floor[p/n] - Floor[q/n])^2 + (Mod[p, n] - Mod[q, n])^2; (*Triads of points*) t0 = Subsets[Range[0, n^2 - 1], {3, 3}]; (* Exclude collinear vertices *) t1 = Select[t0, Det[Map[{Floor[#/n], Mod[#, n], 1} &, {#[[1]], #[[2]], #[[ 3]]}]] != 0 &]; (*Calculate sides*) t2 = Map[{#, Sort[{{#[[2]], #[[3]]}, {#[[3]], #[[1]]}, {#[[1]], #[[2]]}} /. sqDist]} &, t1]; (*Exclude not-scalenes*) t2 = Select[ t2, #[[2, 1]] != #[[2, 2]] && #[[2, 2]] != #[[2, 3]] && #[[2, 3]] != #[[2, 1]] &]; (* Find groups of congruent triangles *) t3 = GatherBy[Range[Length[t2]], t2[[#, 2]] &]; Return[Length[t3]]; ]; Map[q[#] &, Range[10]] (* César Eliud Lozada, Mar 26 2021 *)
Comments