因式分解

我看错题目了,所以有了这篇文章。

题目

给定一个多项式,将其因式分解。

多项式项数 \(n\le 10\),保证所有运算在 int 内。


解题报告

因式分解,暴力怎么做?暴力是不是:枚举,枚举,枚举 \(\cdots\) 然后拿原式查询?

但是 \(\operatorname O(V^n)\) 的复杂度不够优美。

考虑题目中给出的信息,可以得到一些比较好利用的限制(为了方便,将原式写成若干个 \((x+r_i)\) 的形式):

  • \(a_0=\prod_{i=1}^n\limits r_i\)

  • \(a_{n-1}=\sum_{i=1}^n\limits r_i\)

具体的,我们可以将 \(a_0\) 质因数拆分为 \(\prod p_i^{k_i}\) 的形式,那么每个 \(r_j\) 也可以表示成 \(\prod p_i^{k_{i,j}}\),并且 \(k_i=\sum_{j=1}^n\limits k_{i,j}\)

那么总状态数就是将 \(\sum k\) 个数分为 \(n\) 组的方案数,并且有很多无用的状态可以丢掉。

  • 按顺序枚举每一组,保证每一组的值递增。

  • 剩下还有没有利用的 \(n-1\) 个信息,都可以利用,写一个估价函数,判断当前情况之后的每一项的最小值/最大值,从而达到剪枝的目的。

这只是个看错的题目所以自然没有代码啦!没错我就是嘴巴怪。

posted @ 2021-02-26 20:57  zjjws  阅读(135)  评论(0)    收藏  举报