素数对

题目描述
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
输出描述:
输出对数
示例1
输入
10
输出
2

思路

先直接使用素数筛算出1到1000的所有素数,再来判断

#include<bits/stdc++.h>
using namespace std;

const int maxx =  1000+20;
vector<int> vec(maxx, 1);
void isprime(){//素数筛

    vec[0]=  vec[1]= 0;
    for(int i= 2; i< maxx; i++){
        if(vec[i]){
            for(int j= i+i; j< maxx; j+= i){
               if(vec[j])
                vec[j]= 0;
            }
        }
    }

}
int main(){
    isprime();
    int n;

    cin>>n;
    int sum= 0;
    for(int i= 2; i<= n/2; i++){
        if(vec[i]&&vec[n-i])
            sum++;
    }
    cout<<sum<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41879093/article/details/82388348