LOJ Finding LCM(math)

1215 - Finding LCM

Time Limit: 2 second(s)
Memory Limit: 32 MB

LCM is an abbreviation used for Least Common Multiple in Mathematics. We say LCM (a, b, c) = L if and only if L is the least integer which is divisible by a, b and c.

You will be given a, b and L. You have to find c such that LCM (a, b, c) = L. If there are several solutions, print the one where c is as small as possible. If there is no solution, report so.

Input

Input starts with an integer T (≤ 325), denoting the number of test cases.

Each case starts with a line containing three integers a b L (1 ≤ a, b ≤ 106, 1 ≤ L ≤ 1012).

Output

For each case, print the case number and the minimum possible value of c. If no solution is found, print 'impossible'.

Sample Input

3

3 5 30

209475 6992 77086800

2 6 10

Output for Sample Input

Case 1: 2

Case 2: 1

Case 3: impossible

 

题意:lcm(a,b,c)=L;现已知a,b,L的值,求是否存在c满足lcm(a,b,c)=L。

::首先求出a,b的最小公倍数m,则c必包含因子t=L/m;

令g=gcd(c,m);

假设c=t,c*m/g=L,当且仅当gcd(c,m)=1等式成立;

如果gcd(c,m)>1;

那么令(c*g)*(m/g)/gcd(c*g,m/g)=L;当且仅当gcd(c*g,m/g)=1;

如果gcd(c*g,m/g)>1重复上述操作;

例:a=2,b=3,L=12;

则m=6,L=12,t=2;

令c=t;判断gcd(6,2)==2,令c=c*2(==4),m=m/2(==3)

gcd(c,m)==1,故c=4;

代码:

   1: #include <iostream>
   2: #include <algorithm>
   3: #include <cstring>
   4: using namespace std;
   5: typedef long long ll;
   6:  
   7: ll gcd(ll a,ll b){
   8:     if(a<b) swap(a,b);
   9:     return b==0?a:gcd(b,a%b);
  10: }
  11:  
  12: ll lcm(ll a,ll b){
  13:     return a/gcd(a,b)*b;
  14: }
  15:  
  16: int run()
  17: {
  18:     ll a,b,cas=1,L,T;
  19:     cin>>T;
  20:     while(T--)
  21:     {
  22:         cin>>a>>b>>L;
  23:         ll m=lcm(a,b);
  24:         if(m>L||L%m!=0)
  25:         {
  26:             cout<<"Case "<<cas++<<": "<<"impossible"<<endl;
  27:             continue;
  28:         }
  29:         ll c=L/m,g;
  30:         if(c!=1)
  31:           while((g=gcd(m,c))!=1){
  32:               c*=g,m/=g;
  33:           }
  34:         cout<<"Case "<<cas++<<": "<<c<<endl;
  35:     }
  36:     return 0;
  37: }
  38:  
  39: int main()
  40: {
  41:     ios::sync_with_stdio(0);
  42:     return run();
  43: }

你可能感兴趣的:(find)