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 ");
}
posted @ 2021-12-21 20:10  Eason_AC  阅读(32)  评论(0)    收藏  举报