解方程
2017-10-19 07:57
85 查看
0%任何数都是零
可以用模的周期性,f(x)%k是零,f(x+k)%k也是零,很显然,那么你就模三个质数,像哈希一样
然后推出之后的数,o(m)*3的复杂度,竟会超时
可以用模的周期性,f(x)%k是零,f(x+k)%k也是零,很显然,那么你就模三个质数,像哈希一样
然后推出之后的数,o(m)*3的复杂度,竟会超时
#include<cstdio> #include<queue> #include<cstring> using namespace std; #define ll long long const int M=11000; int n,m;ll f[100000][5]; const int p[]={10007,10917,30071}; ll a[5][110],b[1110],s[1100000],x[]={1,1,1},tot; bool calc(int value, int j) { long long tmp=0; for(int i=n;i>=0;--i) tmp=(tmp*value+a[j][i])%p[j]; return tmp!=0; } int main(){ //freopen("equation.in","r",stdin); //freopen("equation.out","w",stdout); scanf("%d%d\n",&n,&m); for(int i=0;i<=n;i++){ char w[M]; gets(w); for(int j=0;j<strlen(w);j++) if(w[j]!='-'){ for(int k=0;k<3;k++) a[k][i]=(a[k][i]*10+w[j]-'0')%p[k]; } for(int k=0;k<3;k++) if(w[0]=='-')a[k][i]=p[k]-a[k][i]; } for(int j=0;j<3;++j) for(int i=0;i<p[j];++i) f[i][j]=calc(i,j); for(int i=1;i<=m;i++){ ll ans=0; int jhfd=0; for(int k=0;k<3;k++) if(f[i%p[k]][k]){ jhfd=1; } if(!jhfd) s[++tot]=i; } printf("%d\n",tot); for(int i=1;i<=tot;i++) printf("%lld\n",s[i]); }
相关文章推荐
- hdu2045 不容易系列三——LELE的RPG难题 (递推方程)
- 编程求一元二次方程。ax²+bx+c=0(a≠0)
- POJ2115——C Looooops(扩展欧几里德+求解模线性方程)
- bzoj 3751: [NOIP2014]解方程 同余系枚举
- POJ 1186 方程的解数
- OJ循环——迭代法求方程的根
- 【数值分析】误差的分析与减少及Matlab解线性方程的四种方法
- 【数据结构•hash表】方程的解…
- 编写函数求方程的根
- 二分法求解方程的近似解(sicily 1017)
- 【C语言】求方程ax^2+bx+c=0的根
- 第九周项目五 方程也是类
- 第九周项目五--方程也是类
- uva-12169&&hdu-2769-Disgruntled Judge 扩展欧几里得,模线性方程
- 第八周项目 5 方程也是类
- noip2014Day2T3解方程
- 遗传算法的简单应用-求解方程
- NOI2001方程的解数 (DFS技巧:meet in the middle)(非哈希)
- POJ 1061 扩展欧几里得算法解不定方程
- C Looooops(扩展欧几里得求模线性方程)