UVALive6428 A+B【扩展欧几里得算法+GCD】
来源:互联网 发布:政府数据开放 分析 编辑:程序博客网 时间:2024/06/04 20:06
Regionals 2013 >> Europe - Southeastern
问题链接:UVALive6428 A+B。
问题分析:
可以看作是解方程ax+by=s的问题。
先用扩展欧几里德算法进行计算,求得ax+by=gcd(a,b)=d。若s%d!=0,则无解。
若有解,再进行迭代计算求得最小非负解。
另外一个关键的地方在于需要考虑a,b和s为0的情形。
AC的C++语言程序如下:
/* UVALive6428 A+B */#include <iostream>using namespace std;typedef long long LL;// 递推法实现扩展欧几里德算法LL exgcd(LL a, LL b, LL *x, LL *y){ LL x0=1, y0=0, x1=0, y1=1; LL r, q; *x=0; *y=1; r = a % b; q = (a - r) / b; while(r) { *x = x0 - q * x1; *y = y0 - q * y1; x0 = x1; y0 = y1; x1 = *x; y1 = *y; a = b; b = r; r = a % b; q = (a - r) / b; } return b;}/* 递归法:欧几里得算法,计算最大公约数 */LL gcd(LL m, LL n){ return (m == 0) ? n : gcd(n%m, m);}int main(){ LL a, b, s, x, y, d; bool ans; while(cin >> a >> b >> s) { if(a == 0 && b == 0) { ans = (s == 0); } else if(a == 0) { ans = (s % b == 0); } else if(b == 0) { ans = (s % a == 0); } else { d = exgcd(a, b, &x, &y); if(s % d != 0) ans = false; else { LL x0 = b / d; LL y0 = a / d; x= ((s / d % x0) * (x % x0) % x0 + x0)%x0; y= (s - x * a) / b; ans = false; while(y > 0) { if(gcd(x, y) == 1) { ans = true; break; } else { x += x0; y -= y0; } } } } cout << (ans ? "YES" : "NO") << endl; } return 0;}
阅读全文
0 0
- UVALive6428 A+B【扩展欧几里得算法+GCD】
- 求gcd(a,b) = ax + by中的gcd(a, b)、a、b(扩展欧几里得算法尾递归版)
- 求解gcd(a,b)=ax+by (扩展欧几里得算法)
- hdu-1576-A/B【扩展欧几里得算法】
- A/B(扩展欧几里得算法)
- Uvalive 6428 A+B(扩展欧几里得算法)
- hdu 1576 A/B 扩展欧几里得算法
- HDU 1576-A/B(扩展欧几里得算法)
- HDU-1576 A/B (扩展欧几里得算法)
- A/B(扩展欧几里得)
- 欧几里得算法(gcd)和扩展欧几里得
- [数论]HDU 1576 A/B 扩展欧几里得算法
- poj 1576 A/B(扩展欧几里得算法)
- HDU 1576 A/B(扩展欧几里得算法)
- HDU1576 A/B 扩展欧几里得
- HDU1576 A/B(扩展欧几里得)
- [hdu1576]: A/b (扩展欧几里得)
- 扩展欧几里得求方程 ax+by=gcd(a,b) 的解
- tomcat server.xml 配置详解
- 关于手动删除Tomcat下的项目,重启Tomcat后报错的问题
- Linux运维笔记-文档总结-Apache基本配置的介绍和语言支持,虚拟主机,访问控制的实现
- centos,linux下django 链接mysql提示mysql.sock无法打开问题
- bond,team链路聚合
- UVALive6428 A+B【扩展欧几里得算法+GCD】
- Linux运维笔记-文档总结-通过ssl加密的HTTPS超文本传输协议和网页重写
- 第35课:彻底解密Spark 2.1.X中Sort Shuffle 中TimSort排序源码具体实现
- Struts2_对Action中所有方法进行输入校验
- Linux运维笔记-文档总结-虚拟网络接口bond
- 图解正向代理、反向代理、透明代理
- Struts2_对action指定方法进行校验
- 用国家简写查找对应的国家名称和所在 洲
- LeetCode 394. Decode String