Farey序列
* * * *
拉格朗日计划
* * * *
Farey序列

n阶Farey序列是由0到1之间的、分母不超过n的最简分数组成的序列。

按升序打印50阶Farey序列。即$0/1, 1/50, 1/49, \ldots$

本题难度:



解答

Farey序列的标准生成方式是取$a/b=0/1$和$c/d=1/1$,将$(a+b)/(c+d)$插入序列并保持有序。之后不断遍历序列,取相邻两项并重复这一过程。

此处为缩短长度,直接生成分子分母的所有可能组合,利用标准库fractions处理最简化和格式化,用set去重后再排序,并单独打印整数$0/1$和$1/1$。

最终代码有五行。

代码长度:122字节 vs. 全站第一:66字节。

from fractions import*
p=print
p("0/1")
for a in sorted({Fraction(j//50+1,j%50+1)for j in range(2500)}):a<1==p(a)
p("1/1")