1. 程式人生 > >【ACM】孿生素數問題

【ACM】孿生素數問題

素數 就是 other turn pro false table name 內存

孿生素數問題

時間限制: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; }

【ACM】孿生素數問題