最大公约数L和最小公倍数G的关系:

1、L%G == 0;

2、设A, B的最大公约数为G, 最小公倍数为L,则:

L/G = (A/G)*(B/G)

3、gcd(A/G, B/G) = 1;

题目:给出一对数A, B 的最大公约数G, 最小公倍数L。这里A, B有多种组合。,求A,B的一种组合使得A + B最小。如果没有则输出-1(SRM535 div2 500pt)

(G <= 10^12, L<=10^12)

猛的一看数据很大。不过用上前边的定理就可以解决了。

领X  = L/G;

枚举A/G的值(不超过sqrt(X)),得到B/G的值。判断是否满足定理3。在所有满足的情况中找最小的ans = min(ans, (A/G + B/G))。最后结果为ans*G

代码:

 1 #include <vector> 2 #include <list> 3 #include <map> 4 #include <set> 5 #include <queue> 6 #include <deque> 7 #include <stack> 8 #include <bitset> 9 #include <algorithm>10 #include <functional>11 #include <numeric>12 #include <utility>13 #include <sstream>14 #include <iostream>15 #include <iomanip>16 #include <cstdio>17 #include <cmath>18 #include <cstdlib>19 #include <ctime>20 21 using namespace std;22 23 24 class FoxAndGCDLCM {25 public:26     long long gcd(long long a, long long b) {27         if(b == 0)    return a;28         return gcd(b, a%b);29     }30     31     long long get(long long G, long long L) {32 33         if(L%G)    return -1;34         long long i, x = L/G;35         long long ans = L;36         37         for(i = 1; i*i <= x; ++i) {38             if(x%i)    continue;39             if(gcd(i, x/i) == 1) {40                 ans = min(ans, i + x/i);41             }42         }43         return ans*G;44     }45 };46 47 48 49 //Powered by KawigiEdit 2.1.8 (beta) modified by pivanof!

SRM遇到的一个数论技巧——最大公约数和最小公倍数的关系相关推荐

  1. 数论:最大公约数与最小公倍数的应用:最大公约数和最小公倍数问题

    总结: 参考文献:https://sochiji.blog.luogu.org/solution-p1029 1.a * b == (a,b) * [a,b] (a,b的最大公约数 * a,b的最小公 ...

  2. 第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数

    第十二单元 数论算法 12.1 同余的性质! 注意下面三个式子,它可以保证在计算中不会发生溢出.  (a+b) mod m=(a mod m+b mod m) mod m  (a-b) mod m ...

  3. python之逆解最大公约数与最小公倍数

    1.贴题 题目来自PythonTip 逆解最大公约数与最小公倍数 我们经常遇到的问题是给你两个数,要你求最大公约数和最小公倍数.今天我们反其道而行之,给你两个数a和b,计算出它们分别是哪两个数的最大公 ...

  4. 求解最大公约数以及最小公倍数

      最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积. 本质上求最小公倍数就是求最大公倍数:x=m*a, y=m*b:m是最大 ...

  5. C++算法:三种方法求最大公约数和最小公倍数

    三种方法求最大公约数和最小公倍数标题 首先明确最大公约数和最小公倍数的关系,设两个数为a,b:最大公约数为c,最大公倍数为d: 则ab=cd;怎么得到的可以通过数学算式证明. 分别用暴力搜索法,辗转相 ...

  6. 16.求两个数的最大公约数和最小公倍数

    #include <stdio.h>//求m,n的最大公约数和最小公倍数 //利用辗除法,又叫做欧几里得算法,是用来求最大公约数的方法 //最大公约数 * 最小公倍数 = a * b in ...

  7. C语言最大公约数和最小公倍数(辗转相除法)

    从键盘输入两个正整数 a 和 b,求其最大公约数和最小公倍数. 算法思想 利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其 ...

  8. C语言_算法_输入两个正整数m和n,求其最大公约数与最小公倍数

    (1)方式一:碾转相除法 #include <stdio.h> #include <math.h> /*输入两个数,求最大公约数 与最小公倍数分析关系:最小公倍数=两数的积/最 ...

  9. Oracle中删除数据的一个小技巧

    在我带的某个Project中,在开发阶段需要Reload相同的Data到Oracle中来进行测试,因此需要不断的删除数据,简单的Delete操作似乎就OK了,但其实不然.我们到知道建表的时候需要Tab ...

最新文章

  1. input python2.7_python 中的input
  2. 为什么只有奇次谐波_治理变频器产生谐波的应用
  3. JavaWeb-RESTful_用SpringMVC开发RESTful
  4. php post aspx,PHP模拟POST aspx页面不成功
  5. tesseract linux 训练
  6. ios9 字符串与UTF-8 互相转换
  7. Lua中的协同程序 coroutine
  8. 1434 区间LCM
  9. Coding the Matrix Week 1 The Vector Space作业
  10. 本周小结!(二叉树系列三)
  11. 【GIS教程】土地利用转移矩阵
  12. speex java_(原创)speex与wav格式音频文件的互相转换(二)
  13. es6中 使用class里面的set和get 用法
  14. SQlserver基础学习
  15. Swagger2学习笔记
  16. 看看英特尔安全(迈克菲)的自适应防御体系
  17. GlusterFS——分布式复制卷
  18. Arduino UNO跑FreeRTOS操作系统
  19. 游戏脚本代码大全_代码与程序的关系是这样的
  20. HTML 前端 flex宫格布局

热门文章

  1. DevExpress打印功能 z
  2. 架设nagios+rrdtool+pnp4nagios监控windows主机
  3. Linux内存手动释放方法
  4. 【.Net Micro Framework PortingKit - 03】调试初步:点亮LED灯
  5. AWS — AWS 上的 5G 网络
  6. VIM — vim-go
  7. [CF1066C]Books Queries
  8. 移植ffmpeg到VC环境心得
  9. Android 程序自动更新功能模块实现
  10. 三台主机分别部署LAMP