标签:
题解:http://www.cnblogs.com/mhy12345/p/4109764.html
我也不知道该怎么选质数才比较优越,但是可以用秦九韶算法优化常数,就容易过了。
#include<bits/stdc++.h>
using namespace std;
int f[5]={
16253,21139,22433,23059,27647
};
int a[5][101];
bool v[5][100000];
char t[10057];
int cnt,st[1000001];
bool foo(int j){
for(int i=0;i!=5;++i)
if(!v[i][j%f[i]])
return 0;
return 1;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int j=0;j<=n;++j){
scanf("%s",t);
for(int i=0;i!=5;++i){
char* s=t+(*t==‘-‘);
while(*s)
a[i][j]=(a[i][j]
*10+*s++-48)%f[i];
if(*t==‘-‘)
a[i][j]=f[i]-a[i][j];
}
}
for(int i=0;i!=5;++i)
for(int j=0;j!=f[i];++j){
int s=0,*t=a[i]+n;
while(t>=a[i])
s=(s*j+*t--)%f[i];
v[i][j]=!s;
}
for(int j=1;j<=m;++j)
if(foo(j))
st[cnt++]=j;
printf("%d\n",cnt);
for(int i=0;i!=cnt;++i)
printf("%d\n",st[i]);
}
标签:
原文地址:http://www.cnblogs.com/f321dd/p/5496119.html