CF1285C 题解

· · 题解

思路

这道题本身就是一个大模拟水题。

先看题意是给定 X 求 \min(\max(a,b)) 其中 \operatorname{lcm}(a,b)=X。

其中 1\le X\le 10^{12}。

那么我们可以二重循环爆模拟,其中第一重枚举 a 第二重枚举 b。

又由题意知 b=\frac{X}{a},又结合辗转相除法时间复杂度可得此思路总时间复杂度为:

## AC 代码 ```c #include<bits/stdc++.h> using namespace std; long long x,a[10001],b[10001],k; long long MIN=0xf7ffffff; int lcm(int a,int b) {return a*b/__gcd(a,b);} int main() { scanf("%lld",&x); for(int i=1;i<=x;i++) { for(int j=1;j<=x/i;j++) { if(lcm(i,j)==x){ a[++k]=i; b[k]=j; } } } for(int i=1;i<=k;i++) MIN=min(max(a[i],b[i]),MIN); if(MIN/x>MIN) printf("%lld %lld",MIN,x/MIN); else printf("%lld %lld",x/MIN,MIN); } ```