洛谷P2312 解方程题解--zhengjun

    科技2024-07-20  66

    一看就不能用求根公式

    首先,因为 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; }
    Processed: 0.012, SQL: 8