最大化由乘积之和组成的方程,然后按数字进行模



我需要一个公式来计算变量和常量乘积的最大和,然后将整个总和执行一个模数。

X = (C1*x1 + C2*x2 + C3*x3..... )%M,我们必须在这里最大化"X",给出 Ci 和 M 的值,所有 xi 都是变量(非负整数,包括零),简而言之,我可以说我们必须改变 xi,以便我们得到最大可能的 X,例如

X = (10*i + 3*j)%18 (这里 i 和 j 是变量,即非负整数)

答案 :- X = 17(取 j = 1 和 i = 5)

是否存在任何公式来找到 X 的最大可能值?

对不起,如果你不明白这个问题(我的英语不好),如果你有任何疑问,请在评论部分询问

如果有一个 C 互质与 M,则存在一个 x,使得 Cx = M - 1 (mod M); 将所有其他 x 设置为 0,并将与我们的特殊 C 对应的 x 设置为所需的值。你不能比 M - 1 (mod M) 做得更好。

否则,如果有两个互质 C,比如 C1 和 C2,那么有可能得到任何大于 (C1 - 1)(C2 - 1) - 1 的总和(查看硬币问题,或弗罗贝尼乌斯数); 由于必须存在一些大于此与 M - 1 (mod M) 全等的数字,这是你能做的; 将所有其他 x 设置为 0 并找到 x1, 需要 x2 才能获得 M - 1。

否则,通过首先将所有 C 与 M 直接比较,然后将所有 C 相互比较来找到最小最大公约数。让这个最小最大公分母称为m。然后,可以使用上述方法进行修改,从而达到M - m(mod M)。但是,不可能达到 M - 1 或高于 M - m (mod M) 的任何值,因为所有数字都有一个公因数。

为了真正找到这些情况下的数字,我认为首先确定案例;然后,遵循策略(1 或 2 个非零项)简单地迭代可能性。由于我们已将其缩小到一到两个术语,因此这并不可怕。可能有一种更聪明的方法来实现这一点......如果需要比检查可能性更复杂的东西,请发表评论,我会重新审视这一点。

更新

评论意见表明,对第三种情况(没有互质系数)的处理是不正确的,而且是不正确的。考虑情况 C1 = 14,C2 = 21,M = 6。上面概述的方法发现最小成对 GCD 为 2,并表示可达到的最大为 6 - 2 = 4;但是,您只需取 x1 = 1 和 x2 = 1 即可获得 5 (mod M)。也许真正需要做的是获得正确的答案是考虑所有成对的GCD,并对它们应用相同的推理。也就是说,我们的成对 GCD 是 2、3 和 7。通过解决 n = 2 的硬币问题,这意味着通过组合每对,我们可以得到这些 GCD 中足够大的倍数的任何数字。这意味着,模M,GCD本身是可以实现的;因此,我们可以递归地将上述解决方案应用于成对 GCD,直到所有成对 GCD 共享一个通用术语(那么我最初的案例分析是正确的);或者,其中一个成对 GCD 变为 1,在这种情况下,答案为 M - 1。

请注意,可能可以跟踪递归和沿途的案例,以根据原始 C 重建正确答案。

更新:

根据评论,我现在将尝试将此(固定?)方法应用于真实示例。

M, C1, C2 = 385, 42, 30
GCD(M, C1) = 7
GCD(M, C2) = 5
GCD(C1, C2) = 6
7 and 5 are coprime so we can get any number greater than (7-1)(5-1)-1
any number greater than 23 is obtainable
384 = 2*[7] + 74*[5]
7 is obtainable
7 = 46*[42]
5 is obtainable
5 = 13*[30]
combining, we get
384 = 2*[7] + 74*[5]
= 2*46*[42] + 74*13*[30]
= 92*[42] + 962[30]
~ 92*C1 + 192C2

相关内容

最新更新