扩展欧几里得最小整数解
来源:互联网 发布:杨紫 否认整容 知乎 编辑:程序博客网 时间:2024/06/06 08:25
我们先讨论a,b,c都大于0的情况 (都为整数)
可以用扩展欧几里德算出 一个特解 x0 , y0;
满足下列方程
a*x0+b*y0=gcd(a,b);
如果c%gcd==0 那么此方程有解,否则没有解
若有解
方程两边同时乘以 c/gcd(a,b) 得 (a*c/gcd(a,b))*x0+(b*c/gcd(a,b))*y0=c;
这时得出方程的一个解 x1=x0*c/gcd(a,b) y1=y0*c/gcd(a,b)
求最小整数解 意思把x1变到减少到不能减少为止 也就是把x0 减少到不能减少为止
若x0减小x,那么方程左边 整体会减少 (a*c/gcd(a,b))*x 此时 y0 需要增加相应的数使得等式平衡
而假设 y0增加了y 总体增加了 (b*c/gcd(a,b))*y 此时 (a*c/gcd(a,b))*x==(a*c/gcd(a,b))*y
而且x,y为整数 我们可以得到 x/y==b/gcd(a,b) / a/gcd(a,b)
这时 x每次减少 b/gcd(a,b) y只需增加 a/gcd(a,b) 就可以使得等式平衡。 那为什么我们不约掉gcd(a,b)?
因为x越小,我们得到的最小整数解就会越小。。。。
这时我们让x0不断减 x (x=b/gcd(a,b)) 直到 x0-i*x>=0 && x0-(i+1)*x<0 (i为减x的次数) 这时得到的就是最小整数解
我们可以让 outcome=x0%x 这时就是答案了(等等 我们又错过了什么?)
假如x0为负数怎么办? 所得outcome=x0%x 为负数(c语言的规则) 这时我们只需要x0+x就可以得到正数了
综上所述:我们可以把x0为正,为负的情况综合起来,得到的表达式如下:
终于来到正题了。。。a,b,c可以为负数,怎么办?这时gcd(a,b) 都可能是负数
其实。。。。。。。
当t<0 时 我们把 t=-t 然后按照上面的方法做就行了。。。。。。。。。。。(没理由。。。尴尬)
下面附上一道题目:扩展欧几里德
Sample Input
1 1 1
Sample Output
0
- 扩展欧几里得最小整数解
- 扩展欧几里得求最小非负整数解 (POJ 1061 青蛙约会为例)
- 扩展欧几里得最大最小正整数解
- NYOJ-整数性质【扩展欧几里得】
- nyoj-775-整数性质(扩展欧几里得定理)
- Uva 10090 Marbles 扩展欧几里得 费用最小
- HDU 2669 扩展欧几里得最小非负解
- 扩展欧几里得 解方程小记
- 扩展欧几里德算法 x的最小非负整数解 xy是否有非负整数解
- 【数论】扩展欧几里得 Ax+By=m 最小的X
- POJ 2142 The Balance 扩展欧几里得,求|x|+|y|最小
- hdoj 2669 Romantic 【扩展欧几里得 求解最小非负解】
- hdoj 2669 Romantic 【扩展欧几里得 求解最小非负解】
- 【欧几里得&扩展欧几里得】
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得&扩展欧几里得
- 欧几里得和扩展欧几里得
- IOS成长之路-使用系统默认声音、震动
- 模板模式
- 虚函数和纯虚函数的区别
- 在 Ubuntu 14.x 搭建 Nginx Uwsgi Django 环境之(二):Django 的安装
- 自己有用的博客
- 扩展欧几里得最小整数解
- TI DSP系列分类
- json
- Java 中extends与implements使用方法
- qt 之 国际化(中英文切换)
- 矩阵的压缩存储以及转置
- [ios/oc] UIWebView 首次非主线程调用导致crash
- Thread->sleep、wait、join使用
- 自定义EXCEL导出功能