Bachgold problem is very easy to formulate. Given a positive integer n represent it as a sum of maximum possible number of prime numbers. One can prove that such representation exists for any integer greater than 1.
Recall that integer k is called prime if it is greater than 1 and has exactly two positive integer divisors — 1 and k.
The only line of the input contains a single integer n (2 ≤ n ≤ 100 000).
The first line of the output contains a single integer k — maximum possible number of primes in representation.
The second line should contain k primes with their sum equal to n. You can print them in any order. If there are several optimal solution, print any of them.
5
2 2 3
6
32 2 2
题意:给定一个数n,求能被最大数目的质数加起来等于n,求最多的数目;
分析:最小的 质数除了1,就是2,3,所以用他俩来加,无疑是数目最多的。此题要注意细节,比如空格什么的
#include <cstdio> #include <algorithm> #include <iostream> #include <queue> #include <string.h> using namespace std; int main() { int n; while(cin>>n) { int num=0; if(n%2==0) { num=n/2; printf("%d\n",num); for(int i=0; i<num; i++) { if(i!=0) printf(" "); printf("2"); } printf("\n"); } else { num=(n-3)/2+1; printf("%d\n",num); if(n==3) printf("3\n"); else { for(int i=0; i<num-1; i++) { printf("2 "); } printf("3\n"); } } } }