拆分数

EI 的博客

可以 \(O(n \sqrt n)\) 计算。

int p[M] = {0}, tmp[M] = {0};//分拆数
void init(int n) {//算出所有小于等于 n 的分拆数 
	int b = sqrt(n);
	p[0] = tmp[0] = 1;
	for (int i = 1; i <= b; i++) {
		for (int t = 1; t <= 2; t++)
			for (int j = i; j <= n - i * i; j++)
				add(tmp[j], tmp[j - i]);
		for (int j = i * i; j <= n; j++)
			add(p[j], tmp[j - i * i]);
	}
} 
posted @ 2024-07-15 11:16  rlc202204  阅读(5)  评论(0编辑  收藏  举报