1. 程式人生 > >Codeforces Round #324 (Div. 2) (哥德巴赫猜想)

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

div std 題目 isp fin codeforce printf for space

題目: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; }

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