CF1916B Two Divisors 题解
题意
给出 的次大和最大因子 和 (这里规定因子不能等于 本身),求 。保证有解。
分析
显然最大的因子是又 去掉一个最小的质因子 得到的,次小因此可能由 去掉一个次小的质因子 ,也可能是 又去掉了一个因子 得到的。
所以 或 。
第一种情况中, 相对 没有 这个因子,所以 不是 的倍数。他们缺失的因子都是对方有的,所以 为他们的最小公倍数。
第二种情况中, 是 的倍数。直接求出因子 ,那么 。
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
long long read(){
long long x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
//const int N=;
int t,n;
ll a,b;
ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
int main(){
t=read();
while(t--){
a=read();b=read();
ll c=gcd(a,b);
if(b%a==0) cout<<b*(b/a)<<endl;
else cout<<c*(b/c)*(a/c)<<endl;
}
return 0;
}

浙公网安备 33010602011771号