【纪中C组】第一题-GCD与LCM
题目描述
给出某两个整数a和b(a<=b)的最大公约数GCD和最小公倍数LCM,请找出满足的a和b,使得b-a的值最小。 |
输入
输入数据只有一行,包括两个整数GCD和LCM。输入保证至少存在一组解。 |
输出
数据范围限制
以下为题解
这题一看到数据,就有一种要凉凉的感觉,但最后还是AC了,这道题要怎么做呢?现在我分享一下我的做题的思想经历。
不难看出,这是一道要用数论做的题,我们先来推出这道题的数学公式:
设这两个数分别为a,b
则可得出LCM=ab/GCD,两边同时除以GCD
得出LCM/GCD=a/GCDb/GCD,
∵a与b最大公约数为GCD
∴a/GCD与b/GCD互质
令n=a/GCD,m=b/GCD
①保证n,m为互质
②n*m=LCM/GCD
③当n与m的差值为最小时,a与b的差值也最小,answer=abs(n-m)*GCD;
注:
要将LCM/GCD分解质因数,为保证n与m互质,所以同一质因数放一边
Code
#include<iostream>
#include<cstdio>
using namespace std;
int q=0,j=0;
long long gcd,lcm