您的位置:首页 > 编程语言

virtual hust 2013.6.21 NEFU 挑战编程----数论 E - Summation of Four Primes

2013-06-21 14:21 281 查看
题目:Summation of Four Primes

思路:好像有个什么定理说是任意的一个偶数都可以表示成两个素数的和,所以对于输入的n,最糟糕的情况是n=8=2+2+2+2,小于8的无解,对于大于8的情况,如果是奇数,我们就拿一个2和一个3出来,如果是偶数,我们就拿两个2出来,那么剩下的就是求某个偶数等于两个素数之和,继续暴力

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;
#define maxn 10000001
bool vis[maxn];
int n_prime=0;
int prime[maxn/6];
void Prime()
{
memset(vis,true,sizeof(vis));
for(int i=2;i<maxn;i++)
if(vis[i])
{
prime[++n_prime]=i;
for(int j=2*i;j<maxn;j+=i)
vis[j]=0;
}
}
int main()
{
int n;
Prime();
while(scanf("%d",&n)!=EOF)
{
if(n<8)
{
printf("Impossible.\n");
continue;
}
else if(n&1)
{
printf("2 3 ");
n-=5;
}
else
{
printf("2 2 ");
n-=4;
}
for(int i=1;i<=n_prime;i++)
{
if(vis[n-prime[i]])
{
printf("%d %d\n",prime[i],n-prime[i]);
break;
}
}
}
return 0;
}


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