【ACM】孿生素數問題

孿生素數問題

時間限制: 3000 ms  |  內存限制:65535 KB
難度: 3
 
描述
寫一個程序,找出給出素數範圍內的全部孿生素數的組數。通常來講,孿生素數就是指兩個素數距離爲2,近的不能再近的相鄰素數。有些童鞋一看到題就開始寫程序,不仔細看題,我們爲了遏制一下讀題不認真仔細的童鞋,規定,兩個素數相鄰爲1的也成爲孿生素數。
 
輸入
第一行給出N(0<N<100)表示測試數據組數。
接下來組測試數據給出m,表示找出m以前的全部孿生素數。
(0<m<1000000)
輸出
每組測試數據輸出佔一行,該行爲m範圍內全部孿生素數組數。
樣例輸入
1
14
樣例輸出
4

 

 #include <iostream> #include <cmath> #include <string> #include <cstdio>

using namespace std; bool isPrime(int n){ if (n<=1) { return false; } if (n==2) { return true; } for (int i = 2 ; i <= floor(sqrt(n*1.0)+0.5); i++) { if (n%i==0) { return false; } } return true; } int main(){ int a[1000010] = {0}; for (int k = 2 ; k < 1000010 ; k++) { if (isPrime(k)) { a[k] = 1; } } int n,m; cin>>n; while(n--){ cin>>m; int count = 0; for (int i = 2 ; i <= m ; i++) { if (a[i]==1) { if (i+1<=m && a[i+1]==1) { count++; } if (i+2<=m && a[i+2]==1) { count++; } } } cout<<count<<endl; } return 0; } 
相關文章
相關標籤/搜索