#include<bits/stdc++.h>
using namespace std;
long long n;//n阶法雷数列
struct fraction{
long long numerator;//分子
long long denominator;//分母
double value=numerator/denominator;//分数值
friend bool operator < (fraction a,fraction b) {
return a.value>b.value;
}
};//分数
bool cmp(fraction a,fraction b) {
return a.value<b.value;
}
fraction reduction(fraction f) {//分数约分
long long gcd=__gcd(f.numerator,f.denominator);//分子与分母的最大公因数
f.numerator/=gcd,f.denominator/=gcd,f.value=f.numerator/f.denominator;
return f;
}
vector<fraction>v;
priority_queue<fraction>q;
int main() {
cin>>n;
for(long long i=2;i<=n;i++) {
for(long long j=1;j<i;j++) {
struct fraction tmp;
tmp.numerator=j,tmp.denominator=i,tmp.value=j/i;
q.push(reduction(tmp));
}
}
printf("%lld阶法雷数列共%lld项\n",n,q.size()+2);
printf("$\\frac{0}{1},");
while(!q.empty()) {
printf("\\frac{%lld}{%lld},",q.top().numerator,q.top().denominator);
q.pop();
}
printf("\\frac{1}{1}$");
return 0;
}
这个代码输入5之后第32-37行会输出10,21,32,51,54,53,43,52,21,31,41,11
($\frac{0}{1},\frac{1}{2},\frac{2}{3},\frac{1}{5},\frac{4}{5},\frac{3}{5},\frac{3}{4},\frac{2}{5},\frac{1}{2},\frac{1}{3},\frac{1}{4},\frac{1}{1}$)
但是正常的5阶法雷数列应该是5为:0/1, 1/5, 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 1/1