你有沒有據說過菲爾茲獎呢?讓咱們從這裏提及吧。
菲爾茲獎是以已故的加拿大數學家、教育家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的素數等差數列麼?
輸出三個數大小都不超過n的全部長度爲3的公差不爲0的素數等差數列,每行按照從小到大的順序輸出數列中的三個數,兩個數之間用空格間隔。對於多個不一樣的素數等差數列,先輸出第一個數比較小的,第一個數相等的狀況下先輸出第二個數比較小的,依此類推。若是不存在這樣的素數等差數列,請輸出「No number sequence」。
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; }