介紹
數學上,n階的法里數列是0和1之間最簡分數的數列,由小至大排列,每個分數的分母不大於n。每個法里數列從0開始,至1結束,但有些人不把這兩項包括進去。有時法里數列也稱為法里級數,嚴格來說這名字不正確,因為法里數列的項不會加起來。
1至10階的法里數列如下:
(1):—2counts
0 1
__________________________________________________
(2):---3counts
0 1/2 1
__________________________________________________
(3):---5counts
0 1/3 1/2 2/3 1
__________________________________________________
(4):---7counts
0 1/4 1/3 1/2 2/3 3/4 1
__________________________________________________
(5):---11counts
0 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1
__________________________________________________
(6):---13counts
0 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6 1
__________________________________________________
(7):---19counts
0 1/7 1/6 1/5 1/4 2/7 1/3 2/5 3/7 1/2 4/7 3/5 2/3 5/7 3/4 4/5 5/6 6/7 1
__________________________________________________
(8):---23counts
0 1/8 1/7 1/6 1/5 1/4 2/7 1/3 3/8 2/5 3/7 1/2 4/7 3/5 5/8 2/3 5/7 3/4 4/5 5/6 6/7 7/8 1
__________________________________________________
(9):---29counts
0 1/9 1/8 1/7 1/6 1/5 2/9 1/4 2/7 1/3 3/8 2/5 3/7 4/9 1/2 5/9 4/7 3/5 5/8 2/3 5/7 3/4 7/9 4/5 5/6 6/7 7/8 8/9 1
__________________________________________________
(10):---33counts
0 1/10 1/9 1/8 1/7 1/6 1/5 2/9 1/4 2/7 3/10 1/3 3/8 2/5 3/7 4/9 1/2 5/9 4/7 3/5 5/8 2/3 7/10 5/7 3/4 7/9 4/5 5/6 6/7 7/8 8/9 9/10 1
__________________________________________________
計算機自動生成任意階代碼 :
--------------
%這是一個生成1-100階法里數列的matlab代碼,可以任意擴展到無窮階。
% Monday, February 16, 2015 by lhz
clear
clc
fileID = fopen('farey_sequence_output.txt','w');
da=date;
fprintf(fileID,'%6s\n',da);
for n=1:99 % 生成1-100階
r=n+1;
a0=1;a1=r;a=1/r;
for i=1:100000000
if a==1;
break
else
x=[1:r-1];
y=(a1*x-1)/a0;
y_t=y-double(uint16(y));
[y_t,index0]=find(y_t==0);
x=x(index0);
y=y(index0);
for i1=1:numel(x)
fac=gcd(x(i1),y(i1));
if fac>1
x(i1)=x(i1)/fac;
y(i1)=y(i1)/fac;
else
end
end
index=find(y<=r);
x1=x(index);
y1=y(index);
a=x1./y1;
[a,index1]=min(a);
end
a0=x1(index1);a1=y1(index1);
a_f(i)=a;
clear x x1 y y1
end
a_f=cat(2,0,1/r,a_f);
numel(a_f);
a_f1=rats(a_f,15); % 15 is a sensitive parameter depending on the rank of Farey sequence,15 is good for 1-100 rank at least。
a_f1=a_f1(8:numel(a_f1));
str=strcat('(',num2str(r),')',':','---',num2str(numel(a_f)),'counts');
fprintf(fileID,'%6s\n',str);
fprintf(fileID,'\n');
fprintf(fileID,'%6s\n',a_f1);
fprintf(fileID,'%6s\n','__________________________________________________');
clear a_f
end
fclose(fileID);
----------------------------
歷史
法里數列是以英國地質學家老約翰·法里得名,他關於這數列的信刊登在1816年的《哲學雜誌》。法里猜測這數列的每一項都是相鄰兩項的中間分數;不過,以所知道的資料,他沒有證明這個性質。法里的信給柯西讀了,就給了一個證明在他的《數學習題》,把這結果歸到法里上。其實,另一位數學家 C. Haros 曾在1802年發表了相類似的結果,幾乎可以肯定法里和柯西都沒看過。所以,法里的名字給了這個數列,是歷史的一次意外。