J. 素數等差數列

J. 素數等差數列

1000ms
1000ms
65536KB
 
64-bit integer IO format: %lld      Java class name: Main
Font Size:
你有沒有據說過菲爾茲獎呢?讓咱們從這裏提及吧。
菲爾茲獎是以已故的加拿大數學家、教育家J.C.菲爾茲的姓氏命名的,這是最著名的世界性數學獎項,所以也有人將菲爾茲獎譽爲數學中的「諾貝爾獎」。第一次菲爾茲獎頒發於1936年,然後每4年一次。它是在每隔四年才召開一次的國際數學家大會上隆重頒發的,且每次獲獎者僅2-4名,所以獲獎的機會比諾貝爾獎還要少,獲獎者是由國際數學聯合會從全世界的第一流青年數學家中評定、遴選出來的。他們都是數學天空中升起的燦爛明星,是數學界的精英。使人稍感遺憾的是,至今爲止,尚未中國數學家得到菲爾茲獎。
不過,在歷屆菲爾茲獎得主中,咱們仍是能夠看到華人的身影。1982年,美籍華裔丘成桐成爲了第一個得到這項榮譽的華人數學家。在2006年的菲爾茲四位獲獎者中,一個叫Terence Tao(陶哲軒)的華裔澳大利亞籍數學家備受矚目。這個數學神童7歲進入高中,9歲進入大學,10歲、11歲、12歲參加國際數學奧林匹克競賽分獲銅牌、銀牌、金牌,16歲得到學士學位,17歲得到碩士學位,21歲得到普林斯頓大學博士學位。他同時在數學的多個領域作出了卓越的成就。他傑出的數學天分,讓世界爲之震驚。
好像有些跑題了,如今言歸正傳。Terence Tao之因此可以得到菲爾茲獎,其主要成果之一是他成功證實了存在任意長的公差不爲0的素數等差數列。這一命題的證實涉及了現代數論中的許多理論,極爲複雜,這裏咱們只看一個由此產生的簡單推論。顯而易見,若是存在任意長的素數等差數列,那麼,咱們要尋找必定長的素數等差數列,一定可以尋找到無窮多個。
如今,咱們只對長度爲3的素數等差數列感興趣。給出一個整數n,你能找出三個數大小都不超過n的全部長度爲3的公差不爲0的素數等差數列麼?

 

Input

輸入只有一個正整數n,n ≤ 10000。
 

Output

輸出三個數大小都不超過n的全部長度爲3的公差不爲0的素數等差數列,每行按照從小到大的順序輸出數列中的三個數,兩個數之間用空格間隔。對於多個不一樣的素數等差數列,先輸出第一個數比較小的,第一個數相等的狀況下先輸出第二個數比較小的,依此類推。若是不存在這樣的素數等差數列,請輸出「No number sequence」。
 

Sample Input

11
 

Sample Output

3 5 7
3 7 11

#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #define M 20000 using namespace std; struct node {     int x,y,z; } a[100000]; bool cmp(node a,node b) {     if(a.x!=b.x)         return a.x<b.x;     if(a.y!=b.y)         return a.y<b.y;     return a.z<b.z; } int main() {     int i,vit[20000],p[20000],j,n,cat,flag,num;     memset(vit,0,sizeof(vit));     vit[1]=0;     vit[2]=1;     for(i=3; i<=M; i++)     {         if(i%2)             vit[i]=1;         else             vit[i]=0;     }     for(i=3; i<=M; i+=2)     {         if(vit[i])         {             for(j=i*2; j<=M; j+=i)                 vit[j]=0;         }     }     cat=0;     for(i=2; i<=M; i++)     {         if(vit[i])             p[cat++]=i;     }     while(~scanf("%d",&n))     {         flag=1;         num=0;         for(i=2; i<=n; i++)         {             for(j=0; p[j]+2*i<=n; j++)             {                 if(vit[p[j]+i]&&vit[p[j]+i+i])                 {                     flag=0;                     a[num].x=p[j];                     a[num].y=p[j]+i;                     a[num++].z=p[j]+i+i;                 }             }         }         if(flag)             printf("No number sequence\n");         else         {             sort(a,a+num,cmp);             for(i=0; i<num; i++)                 printf("%d %d %d\n",a[i].x,a[i].y,a[i].z);         }     }     return 0; }
相關文章
相關標籤/搜索