Math 合并两个数学表并找到第k个元素
将两个数字的倍数合并,并从开始处查找第k个元素。例如Math 合并两个数学表并找到第k个元素,math,Math,将两个数字的倍数合并,并从开始处查找第k个元素。例如 multiples of 3 are 3,6,9,12... multiples of 5 are 5,10,15,20... 最后,在合并这两个数字数组之后,我们得到一个数组 3,5,6,9,10,12,15,15,18,20 因此: the 5th element is 10 the 9th element is 18 注:如果一个数字出现两次(在上述情况下为15),则将其视为2个不同的事件。 设a为第一个数,b为第二个数,k为在a和
multiples of 3 are 3,6,9,12...
multiples of 5 are 5,10,15,20...
最后,在合并这两个数字数组之后,我们得到一个数组
3,5,6,9,10,12,15,15,18,20
因此:
the 5th element is 10
the 9th element is 18
注:如果一个数字出现两次(在上述情况下为15),则将其视为2个不同的事件。
设a为第一个数,b为第二个数,k为在a和b的倍数的合并中需要找到的元素。然后导出一个推广公式
用于查找第k个元素。
例子:
a=3
b=5
k=5
答复:10
a=3
b=5
k=9
答案:18如果你在a的序列中采取b步,在b的序列中采取a步,那么你将到达公共元素a⋅B对于k=a+b,答案是m=ab。对于k=2(a+b),你得到m=2⋅答案是ab。因此,第一近似值为m=k⋅ab/(a+b)。但如果k不是a+b的倍数,这通常是不正确的
因此,采取
m0 = (k * a * b) / (a + b)
作为第一近似值。将其四舍五入为一个resp的倍数。B由于m0
的值看起来太小,让我们先将它们四舍五入到mA
中,这是a的倍数,然后四舍五入到mB
中,这是b的倍数
还不够好。在某些情况下,正确的值m甚至不是mA
或mB
中的一个。例如,对于k=10,两个值都太大。那么,把四舍五入改为四舍五入怎么样
k 1 2 3 4 5 6 7 8 9 10 11 12
m 3 5 6 9 10 12 15 15 18 20 21 24
m0 1.88 3.75 5.62 7.50 9.38 11.25 13.12 15.00 16.88 18.75 20.62 22.50
ma 0 3 3 6 9 9 12 15 15 18 18 21
mb 0 0 5 5 5 10 10 15 15 15 20 20
m1 0 3 5 6 9 10 12 15 15 18 20 21
乍一看,这并没有好多少。但是如果你看最后一行,m1=max(ma,mb)
,你可能会注意到它就像m刚刚移动了一个。这就引出了最终的解决方案:
m = max(floor((k + 1) * b / (a + b)) * a,
floor((k + 1) * a / (a + b)) * b)
我用许多不同的输入尝试了这种方法,到目前为止它似乎是有效的。这不是数学证明,但今天对我来说已经足够了
m = max(floor((k + 1) * b / (a + b)) * a,
floor((k + 1) * a / (a + b)) * b)