Farey级数,中文名是:法雷级数。
百度上是这样定义的:
每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组
成,我们称为n阶法雷级数。
那么我们可以从定义中知道,n阶法雷级数的个数为:
法雷级数有两个重要的性质:
(1)如果与
是相邻的两项,那么
(2)如果,
,
是相邻的三项,那么有:
有了上面的性质,我们就可以写出求第n阶法雷级数的代码了:
void dfs(int a,int b,int x,int y,int n)
{
int p=a+x;
int q=b+y;
if(q>n) return;
dfs(a,b,p,q,n);
cout<<p<<"/"<<q<<" ";
dfs(p,q,x,y,n);
}
dfs(0,1,1,1,n);