SGU 231.Prime Sum
题意:
求有多少对质数(a,b)满足a<=b 且a+b也为质数。(a+b<=10^6)
Solution:
除了2之外的质数都是奇数,两个奇数的和是偶数,不可能是质数。所以题目就是求差为2的质数对的个数。
先用筛法刷出10^6内的质数,用bool数组标记(int型数组会超内存),然后扫一遍筛出来的质数,统计满足要求的答案就行了。
#include <iostream> using namespace std; const int INF = 1000002; bool f[INF]; int ok[80000],out[10000]; int n, sum, ans; void sift (int n) { for (int i = 2; i <= n; i++) { if (!f[i]) { ok[++sum] = i; for (int j = i + i; j <= n; j += i) f[j] = 1; } } } int main() { cin >> n; sift (n); for (int i = 1; i < sum; i++) if (!f[ok[i] + 2]) out[++ans]=ok[i]; cout << ans << endl; for(int i=1;i<=ans;i++) cout<<2<<' '<<out[i]<<endl; }