连分数:
a0+1a1+1a2+1a3+…a0+1a1+1a2+1a3+…
所有2次无理数n−−√n都可以表示为循环连分数,并且循环节都是从第一位开始的。
这里给出求n−−√n 的循环节模版:
void init(ll n)
{
double k=sqrt((double)n);
ll q=1,p=(ll)k;
a[cnt++]=p;
double st=k-p;
do{
q=(n-p*p)/q;
k=(sqrt((double)n)+p)/q;
a[cnt++]=(ll)k;
p=a[cnt-1]*q-p;
}while(fabs(k-a[cnt-1]-st)>eps);
}
//cnt-1 为循环节长度(a[1]-a[cnt-1]) a[0]为整数部分