洛谷 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;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号