扩展欧几里得
来源:互联网 发布:linux中如何创建用户 编辑:程序博客网 时间:2024/05/18 01:39
http://acm.hnu.cn/online/?action=problem&type=show&id=12831&courseid=268
#include <algorithm>#include <cstdio>#include <iostream>using namespace std;long long extend_gcd(long long a,long long b,long long &x,long long &y){if (b==0){x=1;y=0;return a;}else{int r=extend_gcd(b,a%b,y,x);y-=x*(a/b);return r;}}int main(){int T;scanf("%d",&T);while (T--){long long n1,f1,d1,n2,f2,d2;scanf("%lld%lld%lld%lld%lld%lld",&n1,&f1,&d1,&n2,&f2,&d2);long long x0,y0;long long xx=extend_gcd(d1,-d2,x0,y0);if ((f2-f1)%xx)printf("0\n");else{long long k=(f2-f1)/xx;x0*=k;y0*=k;long long g=abs(-d1*d2/xx);long long p1=g/d1;long long p2=g/d2;if (x0-p1>=0 && y0-p2>=0){long long num1=x0/p1;long long num2=y0/p2;long long nnn=num1<num2?num1:num2;x0-=nnn*p1;y0-=nnn*p2;}else if (x0<0 || y0<0){long long num1=(x0+1)/p1;long long num2=(y0+1)/p2;long long nnn=num1<num2?num1:num2;x0+=(-nnn+1)*p1;y0+=(-nnn+1)*p2;}if (x0>n1-1 || y0>n2-1){printf("0\n");continue;}long long total1=n1-1-x0;long long total2=n2-1-y0;long long num1=total1/p1+1;long long num2=total2/p2+1;printf("%lld\n",num1<num2?num1:num2);}}}
0 0
- 【欧几里得&扩展欧几里得】
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得&扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得与扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得 扩展欧几里得
- 欧几里得与扩展欧几里得
- 欧几里得 & 扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得与扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- 黑马程序员——超级猜图笔记
- Mommy, I found it! — 15 Practical Linux Find Command Examples(PART 1)
- Rotate List
- 微信浏览器的HTTP_USER_AGENT
- Matlab plot函数画离散点图
- 扩展欧几里得
- UVA 10306 e-Coins(二维完全背包)
- 百度地图JavaScriptAPI事件使用小贴士
- 开博客了
- javascript 获取滚动条高度+常用js页面宽度与高度
- 负数与二进制换转方法
- 支持中文文本的数据挖掘平台开源项目PyMining发布
- CSS 颜色十六进制值
- 【康托展开+状压BFS】poj1077 Eight(八数码问题)