孿生素數問題
時間限制:
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; }