1. 程式人生 > 其它 >CF749A Bachgold Problem 題解

CF749A Bachgold Problem 題解

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 ");
}