水了个70
就是正常模拟+取模
多取几个模数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<climits>
#include<queue>
#include<vector>
#include<ctime>
#define LL long long
using namespace std;
int prime[4]={0,10007,10917,30071};
char s[10005];
int n,m,x,a[105][4],tot,ans[105],sum1,sum2,sum3;
void work(int p)
{
int len,tmp,i,f=1;
len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i]=='-') f=-1;
else
{
tmp=s[i]-'0';
a[p][1]=(a[p][1]*10+tmp)%prime[1];
a[p][2]=(a[p][2]*10+tmp)%prime[2];
a[p][3]=(a[p][3]*10+tmp)%prime[3];
}
}
a[p][1]=f*a[p][1];
a[p][2]=f*a[p][2];
a[p][3]=f*a[p][3];
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
{
scanf("%s",s);
work(i);
}
for(i=1;i<=m;i++)
{
sum1=0;sum2=0;sum3=0;
for(j=n;j>=1;j--)
{
sum1=((sum1+a[j][1])*i)%prime[1];
sum2=((sum2+a[j][2])*i)%prime[2];
sum3=((sum3+a[j][3])*i)%prime[3];
}
sum1=(sum1+a[0][1])%prime[1];
sum2=(sum2+a[0][2])%prime[2];
sum3=(sum3+a[0][3])%prime[3];
if((sum1==0)&&(sum2==0)&&(sum3==0))
{
tot++;
ans[tot]=i;
}
}
printf("%d\n",tot);
for(i=1;i<=tot;i++)
printf("%d\n",ans[i]);
return 0;
}