参考资料
解题思路
定义点阵的大小为正三角形底边点的个数,即边长 。
令 表示大小为 的点阵包含的总点数,可以通过组合公式得出:
在大小为 的点阵中,任意选取 个点的总方案数为:
如图,考虑大小为 的正三角形框(图中 ):

在这种大小为 的三角形框中,三边对应位置的任意三个点可以构成一个正三角形。因此,每个大小为 的三角形框包含 个正三角形。
对于大小为 的三角形框,其顶点可以位于大小为 的点阵中,这样的点阵包含 个顶点。因此,每个大小为 的三角形框总共有 个位置可以被选取。
因此:
令 为 的两个根:
则有:
其中 是 Digamma 函数,其定义为:
Digamma 函数满足以下递推关系:
还可以用伯努利数 表示为:
当 时,Digamma 函数可以用渐近展开式近似为:
在 较小时,可以通过递推关系放大。用渐进展开式求近似值。
参考代码
#include <bits/stdc++.h>
using namespace std;
double digamma(double x)
{
double res=0;
while(x<10){res-=1/x;x++;}
res+=log(x)-1/(x*2)-1/(x*x*12)+1/(x*x*x*x*120);
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m;
cin>>m;
if(m==1)
{
cout<<"1.7984x10^0"<<'\n';
return 0;
}
double r1=(1.0-sqrt(17))/2,r2=(1.0+sqrt(17))/2;
double ans=(digamma(m+r1)-digamma(m+r2))*(-2)/sqrt(17);
int cnt=0;
while(ans<1){cnt--;ans*=10;}
cout<<fixed<<setprecision(4)<<ans<<"x10^"<<cnt<<'\n';
return 0;
}