分拆素数和(杭电2098)

Problem Description

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

Input

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

Output

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

Sample Input

30
26
0

Sample Output

3
2

题解:

先利用筛选法求出前10000以内的所有素数,再用这些素数去枚举要求的和。

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
    int n,a[10000];
    memset(a,0,sizeof(a));//创建一个数组,初始为0,。以下操作是:若为素数,则保持值为0;否则,将值值1
    for(int i=2;i<=100;i++)
        for(int j=2;j*i<10000;j++)
            a[i*j]=1;
    while(scanf("%d",&n)!=EOF&&n!=0)
    {
        int sum=0;
        for(int i=2;i<n/2;i++)
            if(a[i]==0&&a[n-i]==0)//若两个都为素数
                sum+=1;
        printf("%d\n",sum);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43328040/article/details/84918705