解决复发问题

时间:2014-03-07 15:22:30

标签: algorithm recursion

F(0)=X我获得了F(i)=(A⋅F(i−1)^2 + B⋅F(i−1) + C)%10000001≤i≤N

现在给予NABCX,如何有效地找到所有N元素?

我需要将这些N个元素分成2组,其中最大元素在第1组中,第2组中第2组,第1组中第3大等等......并且最后需要找到总和的绝对差值两组元素。

我可以在不计算所有元素的情况下找到这种差异,因为N可以与10^7ABCX一样大最多100。

2 个答案:

答案 0 :(得分:3)

请注意,序列的下一个元素仅取决于前一个元素,并且不超过M = 1000000个不同的元素,因为每个结果都是取模1000000的整数。因此,序列从某个点开始是周期性的。在找到句点之前,您可以生成前几个元素(不超过M),然后在元素总数为N的情况下立即知道每个元素的数量。

现在,与10 ^ 7相比,10 ^ 6至少有一些改善。一旦你知道从0到999999的每个数字,它在序列中发生了多少次,你也可以在O(M)操作中找到所需的差异。

答案 1 :(得分:0)

如果我是你,我不会害怕计算那些10^7元素。由于它们的范围为[0 1000000[,因此可以计算值的直方图(1000000个计数器),您将进行后处理以获取所需信息(并关注@Gassa)。

迭代公式时要注意溢出,因为F^2不适合32位。