數學家希爾伯特在1900年國際數學家大會的報告上提出一個“孿生素數猜想”,即: 存在無窮多個素數p,使得p + 2是素數。p和p+2這一對差為2的素數,被稱為“孿生素數”。
看起來,這個猜想是成立的,我們總能找到很多對孿生素數,例如:3和5,5和7,11和13…… 這一猜想至今還未被證明。
現在,對於給定的整數n, 請尋找大於n的最小的一對孿生素數p和q(q=p+2)。
輸入格式:
一個不超過7位數字的整數n。
輸出格式:
在一行中輸出 p q ,中間用空格間隔。
輸入樣例:
100
輸出樣例:
101 103
(摘自pintia.cn)
解答:
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 bool isPrime(int); //聲明函數,用於判斷素數 5 int main() 6 { 7 int num; 8 cin>>num; 9 while(true) 10 { 11 num++; 12 if(isPrime(num)) //判斷num是否為素數 13 if(isPrime(num+2)) //判斷num+2是否為素數 14 break; 15 } 16 cout<<num<<' '<<num+2; //輸出結果 17 return 0; 18 } 19 bool isPrime(int a) //用於判斷變量是否為素數 20 { 21 if(a<2) return false; //當變量小於2時不是素數 22 for(int i=2;i<=sqrt(double(a));i++) //使用sqrt()函數減少時間復雜度 23 { 24 if(a%i==0) return false; //可以被除盡,不是素數 25 } 26 return true; //大於2且不能被除盡 27 }
解析:
見代碼注釋。