如何有效解决涉及“模”运算的编码问题?

时间:2019-01-06 07:42:44

标签: algorithm performance time-complexity modulo

我们得到一个整数'N'。我们可以选择(1到z)范围内的任意两个数字(a和b)。 L的值由

给出
L = Max(( (N%a) %b) %N)  

我们必须计算对(a,b)赋予值'L'的对数。 我知道强力解决方案之一,O(n 2 )解决方案。 有没有更有效的方法来解决这个问题?!

1 个答案:

答案 0 :(得分:0)

我能破译Max(( (N%a) %b) %N)的唯一方法是在所有a, b对上都取最大值。如果我错了,请忽略其余部分。

如果z > N/2

  • 首先,请注意,如果ab都大于N,则(N%a) % b会产生N,因此{{1} }产生的1不能令人满意。因此,其中至少一个应小于(N%a) %b) %N

  • 其次,观察(更好地证明)N的最大值是N % a甚至a和{{ 1}}为奇数(重要说明:是N/2 + 1之后的下一个2的倍数的一半)。将其称为N

  • 最后,观察到任何比该模大的(N + 1)/2都保持不变。证明这确实是所需的最大值。

现在您有足够的事实来提出有效的单行程序(不要忘记N情况)。

相同的逻辑适用于maximizer。找到最大化器有点棘手,但仍然可以在b中找到(请参见上面的重要说明)。