ZCMU Problem G: 素数对(数论,素数筛法)
#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define maxn 32800 int main() { int n,cnt,i,j;//筛法,不然超时 int a[maxn]={0}; for(i=2;i<maxn;i++) { for(j=i*2;j<maxn;j+=i) { a[j]++; } } while(scanf("%d",&n)!=EOF&&n) { cnt=0; for(int i=2;i<=n/2;i++)//注意只要判断一半 { if(a[i]==0&&a[n-i]==0) { cnt++; } } printf("%d\n",cnt); } return 0; }
Description
输入一个正整数n,求有几对素数x,y,满足n=x+y((3,2)和(2,3)视为相同的素数对)。
Input
有多组数据,每行输入一个偶整数n(3<n<32768)。n等于0时,输入结束。
Output
输出相应的答案。
Sample Input
6 10 12 0
Sample Output
1 2 1