其实秦九韶相信都会,主要是喜欢这道题对于高精度的处理。
我们发现这道题的情况比较特殊,a大的很,看起来是要高精度的鸭子。
不过我们发现一个事情。我们是在解方程,找到合适的x使多项式为0。那mod一个数好像也没什么问题。
所以我们可以对一个数取余,觉得不稳妥多取余几个,都为0的时候就ok了。
这启示我们要注意题目本身的性质,尝试转化问题。
#include<bits/stdc++.h>
using namespace std;
#define in read()
#define int long long
const int mod=1e9+7;
int in{
int cnt=0,f=1;char ch=0;
while(!isdigit(ch)){
ch=getchar();if(ch=='-')f=-1;
}
while(isdigit(ch)){
cnt=cnt*10%mod+ch-48;cnt=(cnt%mod+mod)%mod;
ch=getchar();
}return cnt*f;
}
int n,m;
int a[1000003];
bool calc(int x){
int sum=0;
for(int i=n;i>=1;i--){
sum=(sum+a[i])%mod*x%mod;
}sum+=a[0];sum%=mod;
return !sum;
}
int cnt,ans[1000003];
signed main(){
n=in;m=in;
for(int i=0;i<=n;i++)a[i]=in;
for(int i=1;i<=m;i++){
if(calc(i)){
ans[++cnt]=i;
}
}
if(!cnt)cout<<cnt;
else{
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)cout<<ans[i]<<'\n';
}
return 0;
}