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;
}

转载于:https://www.cnblogs.com/tigerisland/p/7563771.html

UVALive6428 A+B【扩展欧几里得算法+GCD】相关推荐

  1. GCD LCM 欧几里得算法 扩展欧几里得算法

    欧几里得算法: 辗转相除法的关键恒等式:gcd(a,b)=gcd(b,a mod b); 边界条件:gcd(a,0)=a; //最大公约数 int gcd(int a,int b) {return b ...

  2. 扩展欧几里得算法_扩展欧几里得递推算法

    欧几里得算法 表示 整数 a 与 b 的最大公约数. 若 t = a % b, 则 证明略. 递推版 gcd 算法 gcd 接受变量元组 (a, b) 作为输入,输出最大公约数 (r). 我们很难直接 ...

  3. 欧几里得算法扩展欧几里得算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b). ...

  4. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  5. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  6. POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法)

    POJ 1061 BZOJ 1477 Luogu P1516 青蛙的约会 (扩展欧几里得算法) 手动博客搬家: 本文发表于20180226 23:35:26, 原地址https://blog.csdn ...

  7. 欧几里得算法和扩展欧几里得算法(Euclidean_Algorithm and Extended_Euclidean_Algorithm)

    一.基本概念 欧几里得算法:又名辗转相除法,计算两个整数a,b的最大公约数. 扩展欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ...

  8. 扩展欧几里得算法 POJ 1061

    根据此题 整理下 扩展欧几里得 扩展欧几里得是用来判断并求 ax + by = c 是否有解及其解的数学算法 首先列出定理 1.ax + by = gcd(a,b) 2.gcd(a,b) = gcd( ...

  9. 欧几里得算法和扩展欧几里得算法详解

    欧几里得算法: int gcd(int x,int y){if(y) return gcd(y,x%y);return x; } 扩展欧几里得算法: 先说一个整体思路: 先求Ax+By=gcd(A,B ...

最新文章

  1. 这样学算法,包会包懂so easy~
  2. HttpClient post 与get
  3. caffe安装,编译(包括CUDA和cuDNN的安装),并训练,测试自己的数据(caffe使用教程)
  4. 在Linux系统安装Nodejs
  5. [PHP]常量的一些特性
  6. PostgreSQL的高可用与数据复制方案
  7. (十四)java版spring cloud+spring boot 社交电子商务平台-使用spring cloud Bus刷新配置...
  8. 推流工具_【软件分享】小熊录屏VIP版(手机直播游戏必备推流工具)
  9. STL学习系列一:STL(标准模板库)理论基础
  10. 146_ACCESS之HR招聘信息管理_64位
  11. 编译器说 Lambda 表达式中的变量必须是 final 的,我偏不信 | 原力计划
  12. 20200708:动态规划复习day02
  13. Android Toast 总结
  14. PDFLib去水印办法
  15. 检错码与纠错码,一码归一码
  16. 美通企业日报 | 凯悦集团将在华新开5家奢华酒店;铁姆肯庆祝成立120周年
  17. Unity TileMap工具教程
  18. 快给你的对象做一个微信公众号播报吧-java版
  19. 图片优化技巧,如何做好SEO图片优化?
  20. 做好异常处理,防止无故翻车

热门文章

  1. 在arm板卡上做一个简单的关机脚本
  2. 12.5.2 升12.5.3的补丁 linux下载,游戏1.17/2.12/3.8/4.5/5.2更新内容[附离线补丁下载地址]...
  3. c语言测试代码怎么写,初学C语言,写了一个测试手速的工具,代码发上来,存着。。...
  4. FPGA之道(7)时钟网络资源
  5. 漫谈时序设计(2)需要给复位足够的关心!
  6. 【 C 】在单链表中插入一个新节点的尝试(一)
  7. 数字消费时代 传统行业互联网转型方向
  8. Scala函数的调用
  9. 我的Android进阶之旅------gt;Android APP终极瘦身指南
  10. 学习小米附加和大润发飞牛模式