题解 P2312 【解方程】
hicc0305
2018-09-25 20:20:11
到今天才知道原来多项式这样算答案叫什么秦九韶算法。。我觉得是个人基本都能想到这种最简单的递归啊。。。。。。。
秦九韶算法也没什么好说的,其实就这两行代码,用来快速算一个形如题目的多项式的值的。。。
```cpp
for(int i=n;i>=0;i--)
res=res*x+a[i];
```
是不是很智障。。
然后这道题。。。
也很智障!!!!!!!!!!!!
就,读入的时候取个模,算的时候也取个模,把1~m带进去看算出来是不是0。是不是很sand statue。。实在觉得NOIP2014有点水的。。
代码:
```cpp
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,m,cnt=0;
int a[110],ans[1000100];
int read()
{
int sum=0,fg=1;
char c=getchar();
while(c<'0' || c>'9'){if(c=='-') fg=-1;c=getchar();}
while(c>='0' && c<='9'){sum=((sum*10)+c-'0')%mod,c=getchar();}
return sum*fg;
}
bool Clac(int x)
{
int res=0;
for(int i=n;i>=0;i--)
res=(res*x+a[i])%mod;
return res==0;
}
signed main()
{
n=read(),m=read();
for(int i=0;i<=n;i++)
a[i]=read();
for(int i=1;i<=m;i++)
if(Clac(i)) ans[++cnt]=i;
printf("%lld\n",cnt);
for(int i=1;i<=cnt;i++)
printf("%lld\n",ans[i]);
return 0;
}
```