Dima and Lisa CodeForces - 584D

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;
}

猜你喜欢

转载自blog.csdn.net/sunyutian1998/article/details/82503635