CF749A Bachgold Problem 題解
阿新 • • 發佈:2021-12-21
CF749A Bachgold Problem 題解
Content
給定一個數 \(n\),求它最多能夠拆分成多少個質數,並輸出拆分成的每一個質數。
資料範圍:\(2\leqslant n\leqslant 10^5\)。
Solution
我們考慮儘可能地用小的數拆分。
由樣例 \(2\) 可知,拆分成的質數可以重複,那麼就考慮用最小的兩個—— \(2\) 和 \(3\),來拆分。
我們通過奇偶性來分類討論:
- 當 \(n\) 為奇數,此時我們可以考慮 \(n-3\) 用 \(\dfrac{n-3}{2}\) 個 \(2\) 來拆分,最後用 \(3\)。至於為什麼不是先拆分成 \(\dfrac{n-1}{2}\) 個 \(2\)……因為最後剩個 \(1\)
- 當 \(n\) 為偶數,此時直接用 \(\dfrac{n}{2}\) 個 \(2\) 來拆分就好。
Code
#include <cstdio> using namespace std; int n; int main() { scanf("%d", &n); printf("%d\n", n / 2); if(n % 2) { for(int i = 1; i <= (n - 3) / 2; ++i) printf("2 "); printf("3"); } else for(int i = 1; i <= n / 2; ++i) printf("2 "); }