HDU 2669Romantic(扩展欧几里德裸题)
来源:互联网 发布:linux有什么认证 编辑:程序博客网 时间:2024/05/18 00:18
裸的扩展欧几里德解不定方程,话不多说,看代码中间
的注释即可:
#include<iostream>#include<cstdio>using namespace std;int x, y, c, r;int exgcd(int a, int b, int &x, int &y)//知道扩展欧几里德此处不难写,裸模版;{ if(b == 0) { x = 1; y = 0; return a; } int r = exgcd(b, a%b, x, y); int t = x; x = y; y = t - a/b*y; return r;}bool judge_exgcd(int a, int b, int c, int &x, int &y){ int r = exgcd(a, b, x, y); if(c % r != 0)//即 ax + by = c; C mod GCD(a ,b)方程才有整数解,否则没有整数解,返回false表示无解,输出sorry; { return false; } int k = c / r; //用来求ax + by = c; 的特解,只不过c = 1; 进行到此处a,b一定互质,也就是r = 1; 即此及一下两行均可省略。 x *= k; y *= k; return true;}int main(){ int a, b; while(scanf("%d%d",&a, &b) != EOF) { c = 1; bool flag = judge_exgcd(a, b, c, x, y); if(!flag) { printf("sorry\n"); continue; } while(x < 0)//x有小于零的情况, 别问我为什么,就像妈妈一定有孩子一样,一定有,非要找原因的话,到16, 17行找原因去,把过程中的数字给打印出来看看就知道了 { x += b*10; y -= a*10; } int k = x/b; x = x%b; y += a*k; printf("%d %d\n",x, y); } return 0;}
的注释即可:
阅读全文
0 0
- HDU 2669Romantic(扩展欧几里德裸题)
- HDU 2669 Romantic(扩展欧几里德)
- HDU 2669 Romantic(扩展欧几里德)
- HDU 2669 Romantic(扩展欧几里德)
- hdu 2669 Romantic 扩展欧几里德
- HDU 2669 Romantic(扩展欧几里德)
- HDU 2669----Romantic(扩展欧几里德求乘法逆元)
- HDOJ 2669 Romantic (扩展欧几里德)
- Romantic (扩展欧几里德算法)
- HDU 2669 Romantic 扩展欧几里得模板题@
- HDU 2669 Romantic【扩展欧几里得板子题】
- hdu - 2669 - Romantic(扩展欧几里得)
- 【HDU】2669 - Romantic(扩展欧几里得)
- HDU 2669:Romantic(扩展欧几里得)
- 【hdu 2669】Romantic(扩展欧几里得)
- hdu 2669 Romantic (扩展欧几里得)
- HDU 2669 Romantic 扩展欧几里得
- HDU 2669 Romantic(扩展欧几里得)
- 服务器IMM2实战介绍
- centos设置Apache开机启动
- 数组去重
- android 解决滑动冲突的外部拦截法
- linux zip命令
- HDU 2669Romantic(扩展欧几里德裸题)
- 文本操作(2)——sort
- lintcode-矩阵归零
- 微信公众号平台登陆-你已授权登陆过XXXX
- 执行Oracle中的函数wm_concat报错oracle wmsys.wm_concat ORA-00932: 数据类型不一致: 应为 -, 但却获得 CLOB
- 移动端不同尺寸下的适陪应
- 线程同步
- vue
- 2016