首页 > 代码库 > UVa 11889 最小公倍数

UVa 11889 最小公倍数

https://vjudge.net/problem/UVA-11889

题意:

输入两个整数A和C,求最小的整数B使得lcm(A,B)=C。

 

思路:

首先C是A的公倍数,如果C%A不为0肯定是无解的。

接下来先让B=C/A,求g=gcd(A,B),如果g不为1的话,那么A、B的最小公倍数就是A*B/g,不等于c。

所以我们要去掉这个g,也就是让A/g,B*g。

 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6  7 int A,C; 8  9 int gcd(int a,int b)10 {11     return b==0?a:gcd(b,a%b);12 }13 14 int main()15 {16     int T;17     scanf("%d",&T);18     while(T--)19     {20         scanf("%d%d",&A,&C);21         if(C%A)22         {23             printf("NO SOLUTION\n");24             continue;25         }26         int B=C/A;27         int g=gcd(A,B);28         int t=1;29         while(g!=1)30         {31             t*=g;32             A/=g;33             g=gcd(A,B);34         }35         printf("%d\n",B*t);36     }37     return 0;38 }

 

UVa 11889 最小公倍数