D2T3:
秦九韶算法
#include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> #include<algorithm> #define ll long long using namespace std; const int maxn=1e2+5; const int maxm=1e7+5; const ll P1=999653; const ll P2=673313; const ll P3=999983; ll a[maxn][5],ans[maxm]; int n,m; inline void read(int i){ a[i][1]=a[i][2]=a[i][3]=0ll; ll b=1; char x=getchar(); while(x<'0'||'9'<x){ if(x=='-')b=-1; x=getchar(); } while('0'<=x&&x<='9'){ a[i][1]=( (a[i][1]<<1) + (a[i][1]<<3) + x-'0')%P1; a[i][2]=( (a[i][2]<<1) + (a[i][2]<<3) + x-'0')%P2; a[i][3]=( (a[i][3]<<1) + (a[i][3]<<3) + x-'0')%P3; x=getchar(); } a[i][1]*=b; a[i][2]*=b; a[i][3]*=b; } inline int read2(){ int a=0;bool b=1;char x=getchar(); while(x<'0'||'9'<x){ if(x=='-')b=0; x=getchar(); } while('0'<=x&&x<='9'){ a=(a<<1)+(a<<3)+x-'0'; x=getchar(); } return b ? a : -a ; } int main() { //freopen("equation.in","r",stdin); //freopen("equation.out","w",stdout); n=read2();m=read2(); for(int i=0;i<=n;i++){ read(i); } for(int i=1;i<=m;i++){ ll k1=0,k2=0,k3=0; for(int j=n;j>=0;j--){ k1=(k1*i+a[j][1])%P1; k2=(k2*i+a[j][2])%P2; k3=(k3*i+a[j][3])%P3; } if( (!k1) && (!k2) && (!k3) )ans[ ++ans[0] ]=i; } for(int i=0;i<=ans[0];i++){ printf("%lld\n",ans[i]); } return 0; } /*10457is prime 10459is prime 10463is prime*/