hdu 2098 分拆素数和(素数筛)

Problem Description

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

Input

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

Output

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

Sample Input

30
26
0

Sample Output

3
2
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <cmath>
#include <map>

using namespace std;
typedef long long ll;

#define INF 0x7fffffff
const double inf=1e20;
const int maxn=1e5+10;
const int mod=1e9+7;

int vis[maxn];

int main() {
    int n=1e5;
    int m=sqrt(n+0.5);
    memset(vis,0,sizeof(vis));
    for(int i=2;i<=m;i++)if(!vis[i])
        for(int j=i*i;j<=n;j+=i)vis[j]=1;
    int x;
    while(scanf("%d",&x)!=EOF){
        if(x==0)break;
        int num=0;
        for(int i=2;i<x/2;i++){
            if(!vis[i]&&!vis[x-i]){
                num++;
                //printf("%d %d\n",i,x-i);
            }
        }
        printf("%d\n",num);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/wz-archer/p/12460819.html