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

UVa 11889 最小公倍数的相关文章

Uva 11889 - Benefit( 数论 )

Uva 11889 - Benefit( 数论 ) 题意: calculate the lowest integer B such that LCM(A, B) = C 分析: LCM(A,B) = C = A*B/GCD(A,B)C*GCD(A,B) = A*BC/A = B/GCD(A,B)如果C%A != 0 无解否则, 令t = C/AB = t * GCD(A,B) 即B 一定是 t 的整数倍从t开始枚举B #include <cstdio> typedef long long LL

UVA 11889 Benefit

11889 Benefit 题意: 给出T(T ≤ 100000)组数据:每组数据中给出A,C (1 ≤ A, C ≤ 10e7):已知LCM(A,B)=C,求最小的B 如果无解的话,输出 NO SOLUTION 思路: 比较难懂,可以多思考几遍.首先b=c/a;如果b不是int;直接无解:然后循环(对A和B求GCD的一值,再A/=值)直到那个值为1: 反例:12 16 48,顺便借这个例子分析一下:b=c/a=48/12=4,12和4的LCM是12不是48因为他们的有GCD影响,然后GCD的那

UVa 10791 最小公倍数的最小和(唯一分解定理)

https://vjudge.net/problem/UVA-10791 题意: 输入整数n,求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小. 思路: 首先对n进行质因数分解,举个例子来说,12=2×2×3,最小和为7,也就是4和3,相同质因子必须放在一起,也就是说这里的2个2必须合在一起变成4,不然2和3会有更小的公倍数6. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm>

数论 UVA 11889

有关数论的题目,题目大意是给你两个数a和c,c为a和另一个数b的最小公倍数,要求你求出b的最小值.由最大公约数gcd(a,b)和最小公倍数lcm(a,b)之间的关系可知,lcm(a,b)*gcd(a,b)=a*b; 则b=lcm(a,b)*gcd(a,b)/a,b=c*gcd(a,b)/a,b/gcd(a,b)=c/a.因为c/a是b除去gcd(a,b)后的部分.若gcd(a,c/a)=1,就表明c/a就是我们要求的答案:否则,就说明c/a小于b,需要还原.还原 的过程中,首先求出gcd(a,c

UVa 11889 (GCD) Benefit

好吧,被大白书上的入门题给卡了.=_=|| 已知LCM(A, B) = C,已知A和C,求最小的B 一开始我想当然地以为B = C / A,后来发现这时候的B不一定满足gcd(A, B) = 1 A要不断地除去gcd(A, B),直到满足gcd(A, B) = 1 B最后就应该乘上A除去的值 1 #include <cstdio> 2 3 typedef long long LL; 4 5 LL gcd(LL a, LL b) 6 { return b == 0 ? a : gcd(b, a%

Uva 11889 Benefit (lcm与gcd)

题意:给你两个数,a,c,求出 lcm(a,b)==c 时的 b 的最小值 思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b 由此我们可以得到 b = gcd(a,b)*lcm(a,b)/a 那我们可以先用 lcm(a,b)/a 计算出假定的b值 如果 gcd(a.b)==1 那么b的最小值确定 如果 gcd(a,b)!=1 我们就要通过计算来找到 计算方法为 a=a/gcd(a,b) b=b*gcd(a.b) 样例: 4 6 12 2 6 32 1760 7 16 结果:

UVA数学入门训练Round1[6]

UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll

UVA - 10791 Minimum Sum LCM(最小公倍数的最小和)

题意:输入整数n(1<=n<231),求至少两个正整数,使得它们的最小公倍数为n,且这些整数的和最小.输出最小的和. 分析: 1.将n分解为a1p1*a2p2--,每个aipi作为一个单独的整数时最优. 2.n为1时,len==0:n为素数时,len==1. #pragma comment(linker, "/STACK:102400000, 102400000") #include<cstdio> #include<cstring> #includ

UVA - 10791 - Minimum Sum LCM (数论相关!)

题目链接:Minimum Sum LCM UVA - 10791 Minimum Sum LCM Time Limit:3000MS   Memory Limit:Unknown   64bit IO Format:%lld & %llu SubmitStatus Description  Minimum Sum LCM  LCM (Least Common Multiple) of a set of integers is defined as the minimum number, whic