我们得到一个整数'N'。我们可以选择(1到z)范围内的任意两个数字(a和b)。 L的值由
给出L = Max(( (N%a) %b) %N)
我们必须计算对(a,b)赋予值'L'的对数。 我知道强力解决方案之一,O(n 2 )解决方案。 有没有更有效的方法来解决这个问题?!
答案 0 :(得分:0)
我能破译Max(( (N%a) %b) %N)
的唯一方法是在所有a, b
对上都取最大值。如果我错了,请忽略其余部分。
如果z > N/2
:
首先,请注意,如果a
和b
都大于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
中找到(请参见上面的重要说明)。