1. 题目
分解因式
factorize.pas/c/cpp
【问题描述】
众所周知,整系数范围内分解因式是一个非常难的问题。为了解决这个问题,人们想出了各种公式和方法,例如平方差公式、立方差公式、立方和公式、提取公因式、十字相乘法等等。现在“伟大”的只会空想的不切实际的伪数学爱好者小k同学希望能借助计算机解决这个问题。
为了让自己的题目显得不那么丧心病狂一点,小k同学决定只要你解决一类特殊的因式分解问题,那就是分解. 在整系数范围内分解到不能继续分解为止。换句话说,最后的答案中每个因式不含更低次数的因式。
不过小k后来意识到这个问题还是很丧心病狂,为了降低题目难度,小k给出一个提示:一个多项式是另一个多项式的因式当且仅当a是b的一个约数。
【输入格式】
输入一行一个数n,待分解的多项式就是
【输出格式】
输出一行一个字符串,表示因式分解的结果。最后的输出中每个因式应该不含空格,系数为1或-1时应省略1,系数为0的项应该省略,每个因式应该降幂排列,并且保证首项系数为正。除此以外,我们要求按如下顺序排列因式:优先输出次数低的因式,对于次数相同的因式,依次比较每个因式的系数,从高指数项到低指数项,且包括被省略即系数为0的项。系数首先比较绝对值,其次比较符号。绝对值小的系数字典序序小,绝对值相同时比较符号,负号字典序比正号小。字典序越小的因式应该排在越前面输出。
【样例输入】
factorize.in
20
【样例输出】
factorize.out
(x - 1) (x + 1) (x^2 + 1) (x^4 – x^3 + x^2 - x + 1) (x^4 + x^3 + x^2 + x + 1) (x^8 – x^6 + x^4 – x^2 + 1)
【数据规模和约定】
对于40%的数据,;2<=n<=50
对于100%的数据,.2<=n<=1200
2. 题目实质
我们是不是该提醒一下出题人,我们是学 OI 的,不是学 MO 的。
3. 算法
x^n-1 = (x-1)(x^(n-1)+x^(n-2)+x^(n-3)...+x+1)
------本公式转载自“考研论坛”
首先,将给出的式子,先按照 2 次的拆分方法拆到不能拆,再按照 3 次的拆分方法拆到不能拆,然后再套上面那个公式。
4. 注意事项
能分出 2 次, 3 次的,要先分出来。