题解:P10858 [HBCPC2024] Long Live
x1489631649 · · 题解
题目链接
输入
多组数据,每组数据两个整数
输出
最小公倍数除以最大公因数开根号然后找到两个数
分析
- 首先我们将等式两边同时平方可得最小公倍数除以最大公因数等于
a^2 \times b 。 - 转移使得
a \times b 等于最小公倍数除以最大公因数与a 的乘积。由于最小公倍数和最大公因数已经确定,所以只需要让a 尽量小,而a 的最小值只能是1 。实现
我们可以使用系统自带的函数
\gcd 来进行求值然后再用最小公倍数乘最大公因数等于两个数的积来求出最小公倍数。Code
#include<bits/stdc++.h> using namespace std; int main() { unsigned long long t,x,y,flag; cin>>t; while(t--) { cin>>x>>y; if(x>y) swap(x,y); cout<<"1 "<<(x*y/__gcd(x,y))/__gcd(x,y)<<endl; } }时间复杂度
时间复杂度为
O(t\log V) ,其中V 是值域,显然可以通过。