我知道a
和c
。我怎样才能找到最少的b
if lcm(a,b) = c
?
问问题
88 次
3 回答
0
a = m*d, b = n*d, d = gcd(a,b), so c = lcm(a,b) = mnd;
Thus n = c/a. Notice that the less d, the less b.
so we can traverse the factor d of a, such that gcd(a/d, n) = 1.
the least d is what we need, then b = n*d.
于 2018-06-02T16:43:31.697 回答
0
如果c
是lcm(a, b)
,c%a=0
然后,
(gcd(a, c/a) * c) / a
给出了答案。
这是从以下事实得出的:lcm(a,b) * gcd(a,b) = a * b
此外,gcd(a,b)
通过 euclid 的算法很容易实现,它解决了您的对数复杂性问题。
于 2018-06-02T18:59:30.410 回答
0
您可以使用素数分解找到最小公倍数。在这里,lcm(a, b)
必须包含它们出现在两个数字中的任何一个中的所有质因数a
和它们的最高倍数。b
例如,8 = 2^3
和12 = 2^2 * 3
,所以lcm(8, 12) = 2^3 * 3 = 24
。
这可以很容易地逆转:找到 的主要因素c
(包括它们的多重性),然后检查哪些已经被a
. b
必须是其余的产品。
所以如果c = 24 = 2^3 * 3
和a = 6 = 2 * 3
,那么b
必须是8 = 2^3
。3^1
已经被覆盖,a
但a
只有拥有2^1
,所以b
必须如此2^3
。
于 2018-06-02T17:10:58.460 回答