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;
}
Code

 

posted @ 2015-03-09 22:01  keambar  阅读(311)  评论(0编辑  收藏  举报