首页 > ACM题库 > HDU-杭电 > hdu 2098 分拆素数和-数论-[解题报告]C++
2013
12-29

hdu 2098 分拆素数和-数论-[解题报告]C++

分拆素数和

问题描述 :

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

输入:

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

输出:

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

样例输入:

30
26
0

样例输出:

3
2

题解:

  该题主要是理解题意,将一个偶数拆分成两个不同素数的

代码如下:

#include <stdio.h>
#include <math.h>

int IsPrime(int n)
{
    int i;
    for (i=2; i<=sqrt(n); i++)
    {
        if (n % i == 0)
            return 0;
    }
    return 1;
}

int main()
{
    int n, i, cnt;
    while (scanf("%d", &n) && n)
    {
        cnt = 0;
        for (i=3; i<n/2; i+=2)
        {//因为是不同的两个素数,那必定一个比n/2大,一个比n/2小
            if (IsPrime(i) && IsPrime(n-i))
                cnt++;
        }
        printf("%d\n", cnt);
    }
    return 0;
}

 

 

解题转自:http://www.cnblogs.com/zm001/archive/2013/01/25/2876635.html