题解 P2312 【解方程】

hicc0305

2018-09-25 20:20:11

Solution

到今天才知道原来多项式这样算答案叫什么秦九韶算法。。我觉得是个人基本都能想到这种最简单的递归啊。。。。。。。 秦九韶算法也没什么好说的,其实就这两行代码,用来快速算一个形如题目的多项式的值的。。。 ```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; } ```