文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Bachgold Problem [ Codeforces Round #388 (Div. 2) A ]

codeforces.com


問題

N (2<=N<=100000) を素数の和で表せ。
どの素数を何回使ってもよい。


考察

以前記事にした以下の問題とほとんど同じ考え方で解けます。


Dice Rolling [ Educational Codeforces Round 56 (Rated for Div. 2) A ] - 文系プログラマーのプログラミング備忘録


N が偶数のとき、2以上の偶数は必ず 2 の倍数になっているので、2 を N/2 回出力すればよいです。


N が奇数のとき、N は必ず 3+2*m という形になっています(例:3=3+2*0, 5=3+2*1, 7=3+2*2)。
このときの m は N/2-1 で求められます。
したがって、3 を 1 個出力した後に、2 を(N/2-1)個出力すればよいです。


コード

void solve (FastScanner in, PrintWriter out) {
	
	int n = in.nextInt();
	ArrayList<Integer> list = new ArrayList<>();
	
	if (n%2 == 0) {
		for (int i=0; i<n/2; i++) list.add(2);
	}
	else {
		list.add(3);
		for (int i=0; i<n/2-1; i++) list.add(2);
	}
	
	out.println(list.size());
	for (int i=0; i<list.size(); i++) {
		out.print((i==0?"":" ")+list.get(i));
	}
	out.println();
	
}