HDU 2098 分拆素数和

题目地址:点击打开链接

思路:水题,注意看清是把一个偶数拆成两个不同素数的和就行了

AC代码:

#include <iostream>

using namespace std;

int main()
{
    int i,j,n,a[10000],sum;
    a[1] = 0;
    a[2] = 1;
    for(i=4; i<10000; i+=2)
        a[i] = 0;
    for(i=3; i<10000; i+=2)
    {
        for(j=2; j*j<=i; j++)//注意是小于等于
        {
            if(i % j == 0)
            {
                a[i] = 0;
                break;
            }
        }
        if(j*j > i)
            a[i] = 1;
    }
    while(cin>>n && n)
    {
        sum = 0;
        for(j=2; j<n/2; j++)//除以2不然会记2次,而且是小于,要是小于等于第二个数据就会出错,因为题目要求的是把一个偶数拆成两个不同素数的和
        {
            if(a[j] && a[n-j])
                sum++;
        }
        cout<<sum<<endl;
    }
    return 0;
}

你可能感兴趣的:(HDU 2098 分拆素数和)