题面
题目描述
现有一个一元高阶方程:
a
0
+
a
1
∗
x
+
a
2
∗
x
2
+
.
.
.
+
a
n
∗
x
n
=
0
a_0+a_1*x+a_2*x^2+...+a_n*x^n=0
a0+a1∗x+a2∗x2+...+an∗xn=0
现给出数字
m
m
m,求出此方程在
[
1
,
m
]
[1,m]
[1,m]以内的整数解。
输入格式
第一行包含
2
2
2个整数
n
n
n、
m
m
m,每两个整数之间用一个空格隔开。
接下来的
n
+
1
n+1
n+1行每行包含一个整数,依次为
a
0
a_0
a0,
a
1
a_1
a1,
a
2
a_2
a2,
.
.
.
...
...,
a
n
a_n
an。
输出格式
第一行输出方程在
[
1
,
m
]
[1,m]
[1,m]内的整数解的个数。
接下来每行一个整数,按照从小到大的顺序依次输出方程在
[
1
,
m
]
[1,m]
[1,m]内的一个整数解。
解题思路
秦九韶公式
秦九韶公式-百度百科
这个公式是一个简化多项式的一种算法,详细如下
a 0 + a 1 ∗ x + a 2 ∗ x 2 + . . . + a n ∗ x n \ \ \ \ a_0+a_1*x+a_2*x^2+...+a_n*x^n a0+a1∗x+a2∗x2+...+an∗xn |
---|
= a 0 + x ( a 1 + a 2 ∗ x + . . . + a n ∗ x n − 1 ) =a_0+x(a_1+a_2*x+...+a_n*x^{n-1}) =a0+x(a1+a2∗x+...+an∗xn−1) |
= a 0 + x ( a 1 + x ( a 2 + a 3 ∗ x + . . . + a n ∗ x n − 2 ) ) =a_0+x(a_1+x(a_2+a_3*x+...+a_n*x^{n-2})) =a0+x(a1+x(a2+a3∗x+...+an∗xn−2)) |
… … …… …… |
= a 0 + x ( a 1 + x ( a 2 + x ( a 3 + . . . + x ( a n − 1 + x ( a n ) ) . . . ) =a_0+x(a_1+x(a_2+x(a_3+...+x(a_{n-1}+x(a_n))...) =a0+x(a1+x(a2+x(a3+...+x(an−1+x(an))...) |
这样子可以很好的优化时间复杂度
模数
本来暴力就可以过题,但是因为数据太大了
要对答案摸一个数才能判是否是0,
但是如果这个数刚好是这个模数的倍数,那就不行了
几个大质数 |
---|
1000000007 |
1000000009 |
1000000021 |
1000000033 |
1000000087 |
1000000093 |
从里面任意选两个都可以爆
U
l
o
n
g
l
o
n
g
U long long
Ulonglong
所以同时摸两数且同时为零,那么应该就是零了 (万一不是,请模三个)
代码
暂无