您的位置:首页 > 其它

UVA-10168 Summation of Four Primes

2013-11-19 13:44 543 查看
题意:将一个数分解成四个素数相加

分析:最少的素数为2,所以该数至少为8=2+2+2+2.

当n>8分为奇偶:由哥德巴赫猜想猜想,一个合数可以分解成两个素数相加,所以此题就是有点技巧了,但n为奇数,先取2,3剩下的就是偶数了,就可以分解了,当n是偶数去

先取2,2剩下的还是偶数,也可以分解了。看似很难,其实很水。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 10000000
typedef long long LL;
using namespace std ;
LL p
;

void prime()
{
for(LL i=4;i<=N;i+=2){
p[i]=1;
}
LL m=(LL)sqrt(N);
for(LL i=3;i<=m;i+=2){
if(p[i]) continue;
for(LL j=i*i;j<=N;j+=2*i){
p[j]=1;
}
}
}

void solve(LL x)
{
LL r=x/2;
for(LL i=2;i<=r;i++){
if(!p[i]&&!p[x-i]){
printf("%lld %lld",i,x-i );
break;
}
}
}

int main()
{
LL n,x1,x2;
prime();
while(scanf("%lld",&n)!=EOF){
if(n<=7){
puts("Impossible.");
continue;
}
if(n&1){
printf("2 3 ");
solve(n-5);
}
else{
printf("2 2 ");
solve(n-4);
}
puts("");
}
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学 思维训练