这个题首先求出a,b的最小最小公倍数设为m。
我的做法是唯一分解m和l,再算出c,c其实就是l中含有但是m中不含有的素因子和l中指数大于m中指数的素因子。
网上找到的这个代码就很厉害了QAQ。
求出m后,先把l/m,这样就是m中不含有的和l指数大的减去m指数小的素因子。
然后需要求出m中l中都含有的素因子就行了。累乘上去。也就是求最小公约数~!
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
int t;
ll a,b,l;
int main()
{
scanf("%d",&t);
for(int i=1; i<=t; i++)
{
scanf("%lld%lld%lld",&a,&b,&l);
printf("Case %d: ",i);
ll m=a*b/__gcd(a,b);
if(l%m) printf("impossible\n");
else
{
ll c=l/m;
ll d=__gcd(c,m);
while(d!=1)
{
c*=d;
m/=d;
d=__gcd(c,m);
}
printf("%lld\n",c);
}
}
return 0;
}