一看就不能用求根公式
首先,因为
a
i
a_i
ai 很大,如果要高精度的话,时间复杂度都过不去。
那么,我们考虑把这个大数取模,这样如果弄出来是零,这个值就有可能是一个根。
这个模数最好是一个大质数,这样正确率会高一点
代码
#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
using namespace std
;
int n
,m
;
char c
;
ll a
[101],ans
[1000001];
ll
get(int x
){
register ll p
=1,sum
=0;
register int i
;
for(i
=0;i
<=n
;i
++){
sum
=(sum
+p
*a
[i
]%mod
)%mod
;
p
=p
*x
%mod
;
}
return sum
;
}
int main(){
scanf("%d%d",&n
,&m
);
register int i
;register bool flag
;
for(i
=0;i
<=n
;i
++){
flag
=0;
while(c
<'0'||c
>'9'){if(c
=='-')flag
=1;c
=getchar();}
while(c
>='0'&&c
<='9')a
[i
]=((a
[i
]*10)%mod
+(c
^48))%mod
,c
=getchar();
if(flag
)a
[i
]=mod
-a
[i
];
}
for(i
=1;i
<=m
;i
++){
if(get(i
)==0)ans
[++ans
[0]]=i
;
}
printf("%d\n",ans
[0]);
for(i
=1;i
<=ans
[0];i
++)printf("%d\n",ans
[i
]);
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-32635.html