链接点这儿

题目:

The GCD of two positive integers is the largest integer that divides both the integers without any remainder. The LCM of two positive integers is the smallest positive integer that is divisible by both the integers. A positive integer can be the GCD of many pairs of numbers. Similarly, it can be the LCM of many pairs of numbers. In this problem, you will be given two positive integers. You have to output a pair of numbers whose GCD is the first number and LCM is the second number.

Input The first line of input will consist of a positive integer T. T denotes the number of cases. Each of the next T lines will contain two positive integer, G and L. Output For each case of input, there will be one line of output. It will contain two positive integers a and b, a ≤ b, which has a GCD of G and LCM of L. In case there is more than one pair satisfying the condition, output the pair for which a is minimized. In case there is no such pair, output ‘-1’. Constraints • T ≤ 100 • Both G and L will be less than 231 .

Sample Input 2 1 2 3 4

Sample Output 1 2 -

题目大意:

其实就是说,给你两个数的GCD和LCM,让你求一种小的那个数尽可能的小,并大的在这个基础上也尽可能的小的那两个数。

先上代码!

 #include<bits/stdc++.h>
using namespace std;
int t;
long long a,b,c,d,ans[][];
int main()
{
cin>>t;
for(int i=;i<=t;i++)
{
cin>>a>>b;
if(b%a==)//如果GCD可被LCM整除
{
ans[i][]=a;
ans[i][]=b;
continue;
}
else ans[i][]=-;
}
for(int i=;i<=t;i++)
if(ans[i][]==-)
printf("-1\n");
else
printf("%lld %lld\n",ans[i][],ans[i][]);
return ;
}

为什么可以这么写呢?下面我详细讲一讲:

证明:

我们先看到第11行的if语句:当GCD可被LCM整除时,两个数为GCD和LCM。

我们设两个数分别为a,b。(a<=b)

首先我们知道,GCD一定可以被a和b整除,而a和b又可以被LCM整除,所以GCD一定可被LCM整除。

而我们又知道,当一个数x可被y整除时,他们的GCD为x,LCM为y

又因为GCD*k=a(k>=1&&k==int(k)),所以a>=GCD,最小值为GCD。

所以我们这里就设a为最小值。(也就是a=GCD)

我们确定了a以后,又根据公式:GCD*LCM=a*b,其中GCD,a,LCM已知,所以b的值一定是固定的,而且就等于LCM。

所以当a取最小值(a=GCD(a,b),b=LCM(a,b))时,(a,b)为符合要求的最优解。

证毕。

第11行证完了之后,我们再来证第17行的else语句。

其实还是利用GCD一定可以被a和b整除,而a和b又可以被LCM整除,所以GCD一定可被LCM整除这个原理。

所以一定无解。

证毕。

这个时候我们就证完了。O(t)算法(其实可以算是O(1))。

如果你觉得你有更巧妙的方法,欢迎在下方留言。

最新文章

  1. Javascript常用方法函数收集(二)
  2. 利用iconv进行文件编码批量原地转换
  3. 利用Gson和SharePreference存储结构化数据
  4. 获取select下拉列表选中的值
  5. weewwe
  6. &#39;EntityValidationErrors&#39; property for more details
  7. jQuery 尺寸
  8. CSS 设计彻底研究(四)盒子的浮动与定位
  9. Balanced Binary Tree --Leetcode C++
  10. 安卓中圆角背景图被拉伸的解决方案——.9.png
  11. EBS业务学习之应付INVOICE类型
  12. layui 表格内容显示更改
  13. 虚拟机iso整理
  14. Java学习之--List和ArrayList
  15. 3星|《AI极简经济学》:AI的预测、决策、战略等方面的应用案例介绍
  16. JDBC(1)—Connection
  17. intellij怎么导入MySQL的驱动包
  18. intellij idea 无法启动或调试 spring-boot
  19. UVa 10570 外星人聚会
  20. C++STL 中的容器整体/逐元素操作方法 少写80%for循环

热门文章

  1. leadcode的Hot100系列--226. 翻转二叉树
  2. Tell Don’t Ask
  3. 在?MySQL事务隔离级别了解一下?
  4. c++学习书籍推荐《C和C++安全编码》下载
  5. Mac上Ultra Edit的激活
  6. Java线程安全与数据同步
  7. Flutter学习笔记(9)--组件Widget
  8. Vmware centos7无法联网的问题解决
  9. VUE过滤器的使用 vue 时间格式化
  10. Nodejs监控Apple召回计划&amp;邮件提醒