hdu 1573 X问题 非互素的中国剩余定理应用
2013-07-10 01:23
281 查看
题目地址:
http://acm.hdu.edu.cn/showproblem.php?pid=1573
注意要点:
1 最后的次数直接用除法 取高斯加1即可 若用加法累加会超时
2 很容易漏掉的一点是题目要求正整数个数, 不是非负整数 ,如果最后r1==0 而且结果不是0 ,就要在结果上减一
http://acm.hdu.edu.cn/showproblem.php?pid=1573
注意要点:
1 最后的次数直接用除法 取高斯加1即可 若用加法累加会超时
2 很容易漏掉的一点是题目要求正整数个数, 不是非负整数 ,如果最后r1==0 而且结果不是0 ,就要在结果上减一
#include<iostream> #include<cstdio> using namespace std; typedef long long inta; void extend_gcd(inta a,inta b,inta &x,inta &y,inta &gcd) { if(b==0) { x=1; y=0; gcd=a; } else { extend_gcd(b,a%b,x,y,gcd); inta temp=x; x=y; y=temp-a/b*y; } } int main() { int size=0; cin>>size; for(int k=0;k<size;k++) { int bad=0; inta n,m; cin>>n>>m; int *a=new int[m]; int *r=new int[m]; for(int i=0;i<m;i++) cin>>a[i]; for(int i=0;i<m;i++) cin>>r[i]; inta a1,r1,a2,r2,x,y; a1=a[0]; r1=r[0]; for(int i=1;i<m;i++) { a2=a[i]; r2=r[i]; inta a=a1; inta b=a2; inta c=r2-r1; inta q=1; extend_gcd(a,b,x,y,q); if(c%q!=0) { bad=1; break; // 和poj那个题不一样 后面可以直接不管了 } else { inta t=b/q; x=(c/q*x%t+t)%t; r1=a1*x+r1; a1=a1/q*a2; r1=r1%a1; } } if(bad==1) cout<<0<<endl; else { inta ans= 0; if(n>=r1) ans=(n-r1)/a1+1; if(ans>0&&r1==0) ans-=1; //只要正整数 cout<<ans<<endl; } } }
相关文章推荐
- hdu 1573 X问题 非互素的中国剩余定理应用
- hdu 1573 X问题 非互素的中国剩余定理应用
- hdu_1573 X问题(不互素的中国剩余定理)
- Hdu 1573 X问题 + Hdu 3579 Hello Kiki (模线性方程组-非互质中国剩余定理)
- HDU 1573 X问题 中国剩余定理
- hdu 1573 X问题 (非互质的中国剩余定理)
- HDU 1573 X问题 (中国剩余定理解的个数)
- HDU 1573 X问题 (中国剩余定理非互质)
- hdu 1573 X问题 中国剩余定理(直接模板就OK了)
- hdu1573 中国剩余问题定理 模数非互质
- hdu 1573 X问题 不互质的中国剩余定理
- hdu_1573 X问题(中国剩余定理非互质)
- hdu 1573 X问题 中国剩余定理
- HDU 1573 X问题 中国剩余定理
- HDU 1573 X问题 [中国剩余定理]
- HDU_1573 X问题 中国剩余定理
- 中国剩余定理 hdu 1573 X问题
- [中国剩余定理]Hdu 1573——X问题
- HDU 1573 X问题 (非互质情况下的中国剩余定理)
- hdu 1573 X问题 两两可能不互质的中国剩余定理