数论_最小公倍数_最大公约数_结论_分类讨论_1916_B. Two Divisors

#include

using namespace std;

int gcd(int a,int b)
{
	return b>0?gcd(b,a%b):a;
}

void solve()
{
	int a,b;
	cin>>a>>b;
	
	long long ans=(long long)a*b/gcd(a,b);
	long long x=0;
	
	if(ans>b)
		x=ans;
	else
		x=b/a*b;
	
	cout<<x<<endl;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	cin>>t;
	
	while(t--)
		solve();
	
	return 0;
}

本来准备看题解了,结果猜了一个结论,过了,猜的这个结论符合所有样例

看了一下题解,发现正解就是猜的这个结论,所以用到的主要是最大公约数的模板,还有最小公倍数等于两个数的乘积除以最大公约数

要使得两个数字作为某一个数字的两个最大的除数,并且其中大的除数要严格小于该数字,给定的两个除数假设可以整除,就是 b ∗ b a b*\frac ba bab

不可以整除的话,就是两个数字的最小公倍数

以上可以当作一个结论积累,另外写一个题最好看一下正解,积累经验

要是一个题写不出来,可以多观察样例,要是运气好猜出了结论就非常爽

你可能感兴趣的:(#,CF,900-1000,算法)