HDU 2098 分拆素数和

来源:互联网 发布:如何卸载电脑软件 编辑:程序博客网 时间:2024/06/06 00:39

分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 33755 Accepted Submission(s): 14696

Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?

Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。

Sample Input

30
26
0

Sample Output

3
2


水题
素数筛一遍 遍历小于n/2的素数k 判断n-k是不是素数

#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string>#include<vector>#include<deque>#include<queue>#include<algorithm>#include<set>#include<map>#include<stack>#include<time.h>#include<math.h>#include<list>#include<cstring>#include<fstream>#include<bitset>//#include<memory.h>using namespace std;#define ll long long#define ull unsigned long long#define pii pair<int,int>#define INF 1000000007const int MAX=10000;bool prime[MAX+5];vector<int>prim;void ini_prim(){    int end=sqrt(MAX+3);    fill(prime+2,prime+MAX+3,true);    for(int i=2;i<=end;++i)        for(int j=i*i;j<=MAX;j+=i)            prime[j]=false;    prim.push_back(2);    for(int i=3;i<=MAX;i+=2)        if(prime[i])            prim.push_back(i);}int main(){    //freopen("/home/lu/文档/r.txt","r",stdin);    //freopen("/home/lu/文档/w.txt","w",stdout);    int n;    ini_prim();    while(cin>>n,n){        int res=0;        for(int i=0;i<prim.size()&&2*prim[i]<n;++i)            if(prime[n-prim[i]])                ++res;        cout<<res<<endl;    }    return 0;}
0 0
原创粉丝点击