POJ 3090 Visible Lattice Points 法雷級數

來源:互聯網
上載者:User

題意:從原點看第一象限裡的所有點,能直接看到的點的數目是多少。(不包含原點)

 

法雷級數定義  R.亨斯貝爾格著李忠翻譯的《數學中的智巧》一書,介紹了法雷級數。這裡每一行從0/1開始,以1/1結尾,其它數自左至右將所有的真分數按增加順序排列;第n行是由所有分母小於或等於n的真分數組成,我們稱為n階法雷級數。如下表:

  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)中。

 

#include<cstdio>#include<cstring>using namespace std;#define MAX 1009int p[MAX], a[MAX], pn;int eul[MAX];void prime(){    pn = 0;    memset(a,0,sizeof(a));    int i, j;    for ( i = 2; i < MAX; i++ )    {        if ( a[i] == 0 ) p[pn++] = i;        for ( j = 0; j < pn && i * p[j] < MAX && (p[j] <= a[i] || a[i] == 0); j++ )            a[i*p[j]] = p[j];    }}void Euler_Farey (){    for ( int i = 2; i < MAX; i++ )    {        if ( a[i] == 0 )            eul[i] = i - 1;        else        {            int k = i / a[i];            if ( k % a[i] == 0 ) eul[i] = eul[k] * a[i];            else eul[i] = eul[k] * ( a[i] - 1 );        }    }    eul[1] = 1;    for ( int i = 2; i < MAX; i++ )        eul[i] += eul[i-1];}int main(){    int n, t;    prime();    Euler_Farey();    scanf("%d",&t);    for ( int i = 1; i <= t; i++ )    {        scanf("%d",&n);        printf("%d %d %d\n",i,n,eul[n]*2+1);    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.