标签:
题解: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