题目描述
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于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;
}