(*探索三角(ET)的三个顶点*)
P1={0,0};P2={1/2,0};P3={1/2,1/2};
dd2=平方欧几里得距离;
(*candidatePointQ[p,n]如果“p”是候选点,则为True,否则为False。候选点是属于半径为“n”且中心位于ET中的圆的点*)
candidatePointQ[p_,n_]:=使用[{dds={dd2[p,P1],dd2[p,P2],dd2-[p,P3]}},最大[dds]>=n^2>=最小[dds];
(*检查点“p”是否位于半径为“n”且中心位于ET的任何圆内*)
innerPointQ[p_,n_]:=使用[{dds={dd2[p,P1],dd2[p,P2],dd2-[p,P3]}},最大[dds]<n^2];
(*函数“candidatePoints[n]”给出了距离ET某个点“n”的点列表*)
candidatePoints[n_]:=选择[Table[{i,j},{i,-n,n+1},},-j,-n;
(*函数“centersFromTwoPoints[{{x1,y1},{x2,y2}},n]”给出了半径为“n”且与点对{x1,y1}和{x2,y2}相切的两个圆的中心*)(*注意:如果两个点之间的距离小于2n,则中心的坐标不是整数*)
中心从两个点[{{x1_,y1_},{x2_,y2_}},n]:=
其中[x1==x2,
块[{sqrtTerm=Sqrt[4*n^2-(y1-y2)^2]/2},{x1-sqrtTerm,(y1+y2)/2},
{x1+sqrtTerm,(y1+y2)/2}],
y1==y2,
块[{sqltTerm=Sqrt[4*n^2-(x1-x2)^2]/2},{{(x1+x2)/2,-sqrtTerm+y1},
{(x1+x2)/2,sqrtTerm+y1}}],真,
块[{ddxy2=dd2[{x1,y1},{x2,y2}],sqrtTerm},sqrtTerm=Sqrt[-(ddxy2*(-4*n^2+ddxy2)*(y1-y2)^2)];表[{((x1+x2)*ddxy2-sqrtTerm)/(2*ddxy2),(ddxy2*(y1^2-y2^2)+符号*(x1-x2)*sqrtTerm)/;
(*函数“explorativeCenters[pairc,n]”选择位于ET内的列表“pairc”中半径为“n”的圆的中心*)
explorationiveCenters[pairc_,n_]:=选择[Table[centersFromTwoPoints[pair,n],{pair,pairc}]//展平[#,1]&,0<=#[1]]<=1/2&0<=#[2]]<=#[1];
a[n_]:=如果[n==0,0,模[{points,pairc,expcent,innerpoints},
积分=候选积分[n];
pairc=选择[Subsets[points,{2}],dd2@@#<4n^2&];
expcent=探索中心[pairc,n];
innerpoints=计数[表[{i,j},{i,-n,n+1},},j,-n、n+1}]//展平[#,1]&,_?(innerPointQ[#,n]&)];
Min[表格[Count[点数,_?(dd2[#,center]<n^2&)],{center,expcent}]]+innerpoints]];