Algorithm 为什么我在下面的问题中只迭代到sqrt(N)?
问题摘要 假设岛上有五个人和一只猴子。在 晚上,一个人醒来,把收集的椰子分成五堆 把他的那份藏起来。剩下的一个椰子给了孩子们 猴子 第二个人醒了,做了同样的事。分割后 他把椰子分成五堆,把自己的一份藏起来,剩下一个椰子给了他 猴子。第三个、第四个和第五个男人紧随其后 程序第二天早上,他们把剩下的椰子分成了四份 五等份。这次没有剩下椰子 如果我们知道收集到的椰子数量,结果是什么 可能在该区域的最大人数(和一只猴子) 如果发生相同的过程,请单击“孤岛” 请注意,以上是我个人的抽象概念。完整的问题是可用的 我的解决方案摘要 我将应用以下程序:(Algorithm 为什么我在下面的问题中只迭代到sqrt(N)?,algorithm,math,Algorithm,Math,问题摘要 假设岛上有五个人和一只猴子。在 晚上,一个人醒来,把收集的椰子分成五堆 把他的那份藏起来。剩下的一个椰子给了孩子们 猴子 第二个人醒了,做了同样的事。分割后 他把椰子分成五堆,把自己的一份藏起来,剩下一个椰子给了他 猴子。第三个、第四个和第五个男人紧随其后 程序第二天早上,他们把剩下的椰子分成了四份 五等份。这次没有剩下椰子 如果我们知道收集到的椰子数量,结果是什么 可能在该区域的最大人数(和一只猴子) 如果发生相同的过程,请单击“孤岛” 请注意,以上是我个人的抽象概念。完整的问题是可
N
是收集的椰子数量,d
是在问题摘要中执行上述程序的最大人数)
d=sqrt(N-1)+1
d
,计算N-1
,并获得N
的新值,该值可以使用以下公式得到:N=(N-1)/((N-1)/d)
仅当(N-1)%d==0
。重复计算此公式d
次(N-1)%d==0
,则设置编号d=d-1
,然后重复步骤2d
次,请检查最后的N
是否可被d
整除,即N%d==0
。如果是,则使用的编号d
就是解决方案d==2
仍然不是解决方案,则没有解决方案为什么我只需要选择
d
到sqrt(N-1)+1或ceil(sqrt(N))?我如何知道超出ceil(sqrt(N))
的数字不满足条件?背后的理论是什么?(我知道我只需要重复到ceil(sqrt(N))
,因为书上这么说。我尝试了一个解决方案,包括选择所有可能的d
s,高于平方根阈值,但仍然小于N
,我得到了TLE[时限错误]。好的,原因很简单,这是程序固有的
假设你有d=10
人和m=1
猴子
最后一个醒来的人必须找到多少椰子才能得到他应得的那份?答案是d+m=11
只有最后一个醒来的人才能找到多少椰子才能得到他应得的那份?现在,如果我们想得到准确的数字,答案就有点棘手了,但一般来说,答案至少必须是(d+m)+(d+m)=22=2*(d+m)
,这样最后一个才能在他之后得到公平的份额
因为这是针对人数的,所以第一个人前面的乘系数必须是d
因此N>=d*(d+m)
,对于m>0
,这也适用于N>=d*d
。
现在你把
sqrt()
两面都拿出来,你就得到了答案。你不应该为这个问题链接到外部站点。请在quer问题中至少添加一个简化版本。@Smith42先生,我已经添加了问题的重要部分。也许你还应该说关于这个问题的d
和N
。@norok2添加了信息。第三段和第四段的问题有什么区别?理查德:对不起,更正了,一个是最后一个人,另一个是最后一个人。好的,谢谢。我现在明白了。我有点好奇你是怎么想出这个理由的。阅读它让我明白了,但在得到解释之前思考如何做对我来说有点困难。我刚开始写下方程式,意识到整数约束更容易从下往上看。原则上,你可以从第一人称开始,得出一个类似的方程式,但要意识到你必须为每次迭代得到一个因子d
,这就不那么明确了。