原题链接:
题意
给定一个正整数 n ( n ≥ 2 ) n(n ≥2) n(n≥2),将 n n n表示为最大可能个质数之和。
思路
最大可能,即将n表示为若干个 2 2 2与若干个 3 3 3之和,显而易见:
- 若 n n n为偶数,则将 n n n表示为 n / 2 n / 2 n/2 个 2 2 2 之和。
- 若 n n n为奇数,则将 n n n表示为 1 1 1个 3 3 3 与 ( n / 2 ) − 1 (n / 2) - 1 (n/2)−1个 2 2 2 之和。
c++代码
//Author:Fczhao
//Language:cpp
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin >> n;
if(n % 2 == 0){
cout << n / 2 << endl;
for(int i = 0; i < n / 2; i++) cout << 2 << " ";
}
else{
cout << (n - 3) / 2 + 1 << endl;
cout << 3;
for(int i = 0; i < (n - 3) / 2; i++) cout << " " << 2;
}
cout << endl;
}
int main(){
ios::sync_with_stdio(false);
solve();
return 0;
}