传送门
题意:
给出a,b,L求lcm(a,b,c)=L
首先我们可以算出ab的lcm为k,然后令L/k=r,从r开始枚举c
那么 k ∗ c / g c d ( k , c ) = L k*c/gcd(k,c)=L k∗c/gcd(k,c)=L,当gcd(k,c)等于1时即找到c的最小值
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main() {
int t;
cin>>t;
int k=1;
while(t--) {
long long a,b,c,L;
cin>>a>>b>>L;
printf("Case %d: ",k++);
c=a*b/(__gcd(a,b));
if(L%c) cout<<"impossible\n";
else {
long long d=L/c;
while(__gcd(d,c)!=1) {
long long m=__gcd(c,d);
c/=m;
d*=m;
}
cout<<d<<endl;
}
}
return 0;
}