Codeforces Round #324 (Div. 2) (哥德巴赫猜想)

题目:http://codeforces.com/problemset/problem/584/D

思路:

  • 关于偶数的哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和。

  • 关于奇数的哥德巴赫猜想:任一大于7的奇数都可写成三个质数之和的猜想。

  • #include<cstdio>
    #include<cstring>
    #include<cmath>
    #define ll long long
    using namespace std;
    
    bool isprime(ll n)
    {
        for(ll i=2;i<=sqrt(n);i++)
            if(n%i==0)
                return false;
        return true;
    }
    
    int main()
    {
        ll n;
        scanf("%lld",&n);
        if(isprime(n))
        {
            printf("1\n");
            printf("%lld\n",n);
        }
        else if(n%2==0)
        {
            for(ll i=n-1;i>=2;i-=2)
            {
                if(isprime(n-i) && isprime(i))
                {
                    printf("2\n");
                    printf("%lld %lld\n",i,n-i);
                    break;
                }
            }
        }
        else
        {
            bool flag=0;
            for(ll i=n;i>=2;i-=2)
            {
                if(!isprime(i))continue;
                ll p=n-i;
                for(ll j=2;j<p;j++)
                {
                    if(isprime(j) && isprime(p-j))
                    {
                        printf("3\n");
                        printf("%lld %lld %lld\n",i,j,n-i-j);
                        flag=1;
                        break;
                    }
                }
                if(flag)break;
            }
        }
        return 0;
    }

猜你喜欢

转载自www.cnblogs.com/Lis-/p/10693419.html