题目: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 "); printf("%lld ",n); } else if(n%2==0) { for(ll i=n-1;i>=2;i-=2) { if(isprime(n-i) && isprime(i)) { printf("2 "); printf("%lld %lld ",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 "); printf("%lld %lld %lld ",i,j,n-i-j); flag=1; break; } } if(flag)break; } } return 0; }