您的位置:首页 > 其它

分拆素数和(数论)

2016-04-10 08:47 381 查看
B -
分拆素数和
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d
& %I64u
SubmitStatusPracticeHDU
2098

Description

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

Input

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

Output

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

Sample Input

30
26
0


Sample Output

3
2

#include <iostream>
#include <cstdio>

using namespace std;

const int MAXN = 1e6;

int prime[MAXN];
bool is_prime[MAXN+1];

int main()
{
int num, i, j, ans;
int p = 0, n = 1000000;
for( int i = 0; i<n; i++ )
is_prime[i] = true;
is_prime[0] = is_prime[1] = false;
for(int i = 2; i<=n; i++ )
{
if(is_prime[i])
{
prime[p++] = i;
for( int j = 2*i; j<=n; j+=i )
is_prime[j] = false;
}
}
while( cin >> num && num )
{
ans = 0;
for( i=0; i<num; i++ )
{
if( prime[i]>num )
break;
for( j=i+1; j<num; j++ )
{
if( prime[j] >num )
break;
if(prime[i]+prime[j] == num)
{
ans++;
break;
}
}
}
cout << ans << endl;
}
return 0;
}

水题。。。但是做的很爽
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: