bzoj#P3151. [CTSC2013]因式分解

[CTSC2013]因式分解

题目描述

通过代数基本定理,我们知道若计算重根,一个 nn 次的多项式在复数域内恰好有 nn 个零点(函数值为 00 的点)。现给定一个整系数多项式 FxF_x ,它的 nn 个零点恰好都是有理数(即可以写成两个整数相除的形式);同时,若我们把它所有的非零零点(函数自变量不为 00 ,函数值为 00 )去重,则可以得到 rr 个互不相同的非零零点,其中第 ii 个非零零点可以被表示成下式:

sgni×qipisgn_i \times \frac{q_i}{p_i}

式中 sgnisgn_i 表示第 ii 个零点的符号, pip_iqiq_i 为互质的两个正整数。

现在告诉你 FxF_x,要求你输出将他因式分解后的形式。

输入格式

输入只有一行,包含多项式 FxF_x

多项式一定是如下的形式:

anxn+an1xn1++a1x+a0a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0

次数一定为从高到低,其中 aia_i 为整数,并且若 aia_i00 ,则省略该项,若 aia_i 为负数,则省略之前的加号,若 aia_i 的绝对值为 11ii 不为 00 ,则不输出 11 ,并且保证 ana_n 不为 00

详见样例输入。

输出格式

输出一行,表示因式分解后的形式,格式如下: $a_n(x+u_1/v_1)^{t_1}(x+u2/v2)^{t_2}\cdots(x+u_s/v_s)^{t_s}$

其中 u,vu,v 互质,且 vv 为正整数。

其中 ui/viu_i/v_i 从大到小排列,若 ui/vi=0u_i/v_i = 0 则该项为 xtix^{t_i} ,若 ui/viu_i/v_i 为负数,则省略加号,若 viv_i11 ,则省略 /vi/v_i

tit_i11 则省略 tit_i

ana_n±1\pm 1 则将 11 省略。

详见样例输出。

样例输入 #1

8x^7-258x^5+2112x^3-512x

样例输出 #1

8(x-4)^2(x-1/2)x(x+1/2)(x+4)^2

样例输入 #2

-x^2+2x-1

样例输出 #2

-(x-1)^2

数据规模与约定

测试点编号 多项式最高次数 互异零点数 系数范围(绝对值)
11 22 10\le 10
22 44 100\le 100
33 77 106\le 10^6
44 1010 107\le 10^7
55 1212 1016\le 10^{16}
66 3535 55 1024\le 10^{24}
77 3939 1068\le 10^{68}
88 4646 44 10104\le 10^{104}
99 8080 22 1012\le 10^{12}
1010 5050 11 10316\le 10^{316}

pi,qip_i,q_i 满足:

$$\prod_{i=1}^r p_i\le 10^6,\prod_{i=1}^r q_i\le 10^6 $$