​http://codeforces.com/contest/584/problem/D​

歌德巴赫猜想:任一大于2的偶数都可写成两个质数之和 任一大于7的奇数都可写成三个素数之和

小常识:10^9范围内 相邻两个素数差不超过300

#include <bits/stdc++.h>
using namespace std;

bool judge(int n)
{
int i;
if(n==2||n==3) return true;
for(i=2;i*i<=n;i++) if(n%i==0) return false;
return true;
}

int main()
{
int n,i,p;
scanf("%d",&n);
if(judge(n)) printf("1\n%d\n",n);
else if(judge(n-2)) printf("2\n%d %d\n",2,n-2);
else if(judge(n-4)) printf("3\n%d %d %d\n",2,2,n-4);
else
{
for(i=2;i<=300;i++)
{
if(judge(n-i))
{
p=i;
break;
}
}
if(judge(p)) printf("2\n%d %d\n",p,n-p);
else
{
for(i=2;i<=p;i++)
{
if(judge(i)&&judge(p-i))
{
printf("3\n%d %d %d\n",i,p-i,n-p);
break;
}
}
}
}
return 0;
}