洛谷 P2312 解方程题解--zhengjun
一看就不能用求根公式
首先,因为 \(a_i\) 很大,如果要高精度的话,时间复杂度都过不去。
那么,我们考虑把这个大数取模,这样如果弄出来是零,这个值就有可能是一个根。
这个模数最好是一个大质数,这样正确率会高一点
代码
#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;
}