乱搞
很奇怪的一个题目。。。
因为一个多项式=0,那么它mod一个质数也=0。
然后我们选几个质数,使劲膜就可以了。。。
计算的话用秦九韶算法就行。
似乎这种做法会t掉(常数巨大),需要加些优化。
当
x
x
q≠0
q
≠
0
时,
x+q∗k
x
+
q
∗
k
mod
m
o
d
q≠0
q
≠
0
。于是再判一下就行
但是洛谷数据貌似很弱,所以。。。连1e9+7都行。。。
代码(未优化):
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 100
#define MAXM 1000000
using namespace std;
typedef long long LL;
const LL ZZK=1e9+7;//
LL n,m,a[MAXN+5];
LL ans[MAXM+5];
inline char readc(){
static char buf[100000],*l=buf,*r=buf;
if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);
if (l==r) return EOF; return *l++;
}
inline LL _read(){
LL num=0; char ch=readc(); LL f=1;
while ((ch<'0'||ch>'9')&&ch!='-') ch=readc();
if (ch=='-') { f=-1; ch=readc(); }
while (ch>='0'&&ch<='9') { num=(num*10+ch-48)%ZZK; ch=readc(); }
return num*f;
}
LL pd(LL x){
LL sum=0;
for (LL i=n;i>=0;i--) sum=((sum+a[i])*x)%ZZK;
return sum;
}
int main(){
n=_read(); m=_read();
for (LL i=0;i<=n;i++)
a[i]=_read();
LL node=0;
for (LL i=1;i<=m;i++) if (!pd(i)) ans[++node]=i;
printf("%lld\n",node);
for (int i=1;i<=node;i++)
printf("%lld\n",ans[i]);
return 0;
}