尋找孿生素數


數學家希爾伯特在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 }

 

 

 

解析:

  見代碼注釋。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM