题意:在第一象限中,格点(x,y)(0<=x,y<=n)如下图
已知数 n,求满足从(0,0)到(x,y)点,不经过其他任何格点的这样的点有多少个
分析:
#include<stdio.h>
int a[1010]={1,1,0};
void prime()
{
int i,j;
for(i=2;i<=1000;i++){
if(a[i]==0)
for(j=i;j<=1000;j+=i){
if(a[j]==0)
a[j]=j;
a[j]=a[j]/i*(i-1);
}
}
}
int main()
{
int i,n,m,s[1010];
prime();
s[1]=3;
for(i=2;i<=1000;i++)
s[i]=s[i-1]+2*a[i];
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&m);
printf("%d %d %d\n",i,m,s[m]);
}
return 0;
}
F1: 0/1 1/1
F2: 0/1 1/2 1/1
F3: 0/1 1/3 1/2 2/3 1/1
F4: 0/1 1/4 1/3 1/2 2/3 3/4 1/1
F5: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
F6:0/1 1/6 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 5/6 1/1
…… ………………………………
这里我们想问的是第n行Fn的真分数的个数有多少个呢?
我们设Fn的个数为ψ(n), ψ(n)比 ψ(n-1)增加的个数是分母是n,分子比n小且与n互质的数的个数,这正是欧拉函数φ(n)。即
ψ(n)=ψ(n-1)+ φ(n)
ψ(1)=1+φ(1)
ψ(2)=ψ(1)+φ(2)
ψ(3)=ψ(2)+φ(3)
………………
ψ(n)= ψ(n-1)+ φ(n)
所以 ψ(n)=1+φ(1)+φ(2)+φ(3)+……+φ(n)
很容易证明,当n≥3时,欧拉函数φ(n)是个偶数。由此我们得到除ψ(1)=2是偶数外,法雷级数其它各级的个数都是奇数,并且许多是素数。ψ(1)=2,ψ(2)=3,ψ(3)=5,ψ(4)=7,ψ(5)=11,ψ(6)=13,ψ(7)=19,ψ(8)=23,ψ(9)=29,……。
性质
法雷级数Fn具有很多美妙的性质,下面是一些常见的性质:
1.如果a/b,c/d是相邻的两项,则abs(a*d-b*c)=1。
2.如果a/b,c/d,e/f是相邻的三项,则 (a+e)/(b+f)=c/d,特别的,如果c/d是新添加的,
即c/d不属于F(n-1),则c=a+e;d=b+f。
性质2对于这个问题至关重要,它的证明可以参见哈代(Hardy)写的数论导引第三章
关于Farey级数的介绍。根据这条性质可以知道,从 F(n−1)到F(n)的构造过程中,F(n)的新项的分母一定是其相领两项的分母和。另一方面,如果F(n−1)中的相邻两项 a/b,c/d, b+d=n,则(a+c)/n一定会被添加到F(n)中。