题目:
https://www.luogu.com.cn/problem/P4598
给出一个一元
n
n
n次方程:
a
0
+
a
1
x
+
a
2
x
2
+
.
.
.
a
n
x
n
=
0
a_0+a_1x+a_2x^2+...a_nx^n=0
a0+a1x+a2x2+...anxn=0
求此方程的所有有理数解。
n
≤
100
,
∣
a
i
∣
≤
2
∗
1
0
7
,
a
n
≠
0
n\le 100,|a_i|\le2*10^7,a_n\neq0
n≤100,∣ai∣≤2∗107,an=0
思路:
设
x
=
p
q
x=\frac{p}{q}
x=qp,且gcd(p,q)=1,则有:
∑
i
=
0
n
a
i
(
p
q
)
i
=
0
\sum_{i=0}^{n}a_i\Big(\frac{p}{q}\Big)^i=0
i=0∑nai(qp)i=0
通分得:
∑
i
=
0
n
a
i
p
i
q
n
−
i
=
0
\sum_{i=0}^{n}a_ip^iq^{n-i}=0
i=0∑naipiqn−i=0
取模有:
{
a
0
q
n
+
∑
i
=
1
n
a
i
p
i
q
n
−
i
≡
0
(
m
o
d
p
)
∑
i
=
0
n
−
1
a
i
p
i
q
n
−
i
+
a
n
p
n
≡
0
(
m
o
d
q
)
\begin{cases} a_0q^n+\sum_{i=1}^{n}a_ip^iq^{n-i}\equiv0(mod\,p)\\ \sum_{i=0}^{n-1}a_ip^iq^{n-i}+a_np^n\equiv0(mod\,q)\\ \end{cases}
{a0qn+∑i=1naipiqn−i≡0(modp)∑i=0n−1aipiqn−i+anpn≡0(modq)
得:
{
a
0
q
n
≡
0
(
m
o
d
p
)
a
n
p
n
≡
0
(
m
o
d
q
)
\begin{cases} a_0q^n\equiv0(mod\,p)\\ a_np^n\equiv0(mod\,q)\\ \end{cases}
{a0qn≡0(modp)anpn≡0(modq)
因为
g
c
d
(
p
,
q
)
=
1
gcd(p,q)=1
gcd(p,q)=1,得:
{
p
∣
a
0
q
∣
a
n
\begin{cases} p|a_0\\ q|a_n\\ \end{cases}
{p∣a0q∣an
当然如果
a
0
=
0
a_0=0
a0=0 的话需要找到一个最小的
t
t
t满足
a
t
≠
0
a_t\neq 0
at=0,然后就可以枚举
p
∣
a
0
,
q
∣
a
n
p|a_0,q|a_n
p∣a0,q∣an,然后暴力判断是否可行,判断的方法和解方程这道题一样,即放到模
m
o
d
mod
mod剩余系下判断是否为
0
0
0