2017校招真题在线编程-素数对

题目描述

给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))

输入描述:

输入包括一个整数n,(3 ≤ n < 1000)

输出描述:

输出对数
示例1

输入

复制
10

输出

复制
2

思路:可以写个函数判断素数,但感觉会比较麻烦,我们可以使用埃拉托斯特尼筛法判断所需区间内所有的素数,然后计数素数对即可。
代码:
#include<iostream>
#include<vector>
using namespace std;


int main(){
    int n;
    cin>>n;
    vector<int> v(1000,1);
    for(int i = 2; i< n-1 ;++i){//最小素数为2,相应区间2~n-2
        if(v[i] == 1){
            for(int j = 2; j*i < n-1; ++j) v[j*i] = 0;
        }
    }
    int res = 0;
    for(int i = 2; i <= n/2; ++i){
        if(v[i] == 1 && v[n-i] == 1) ++res;
    }
    cout<<res;
}

 

posted @ 2018-09-14 10:20  J1ac  阅读(285)  评论(0编辑  收藏  举报