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 }
时间: 2024-11-04 21:39:08