有人可以帮我解决这类问题吗?我应该采取哪种方法?
答案 0 :(得分:0)
正在研究问题,因为系统会要求您
您可能需要
现在的问题是如何做到这一点。让我们看看定义为
的循环让我们从探索重复性开始,看看是否出现任何模式。这里突出的是-此重复的奇数项仅取决于重复中的其他奇数项。这意味着我们可以想象将这种重复分成两个较小的重复:一个纯粹处理奇数项,另一个纯粹处理偶数项。令D(n)为奇数项的序列,E(n)为偶数项的序列。然后我们有
我们只需要计算奇数上的D,因此我们可以尝试一下以查看是否出现模式:
这里的模式是D(2n + 1)= 3 n 。嘿,这是个好消息!这意味着我们拥有直接计算D(2n + 1)的方法。
请记住,将E(n)定义为
请记住,我们知道D(n + 1)的确切值,这将使我们的生活更加轻松。让我们看看如果我们对此重复进行一点迭代会发生什么。例如,请注意
E(8)
= 2D(7)-E(6)+ 2
= 2D(7)+ 2-(2D(5)-E(4)+ 2)
= 2D(7)-2D(5)+ E(4)
= 2D(7)-2D(5)+(2D(3)-E(2)+ 2)
= 2D(7)-2D(5)+ 2D(3)+ 2-D(1)
= 2D(7)-2D(5)+ 2D(3)-D(1)+ 2
好吧...那真的非常有趣。似乎我们得到了D递归的交替总和,我们在包含2和排除2之间进行了交替。在这一点上,如果我不得不猜测,我会说解决该递归的方法将是可以考虑将偶数情况进一步细分为偶数n为2n且奇数n为2n的情况。实际上,请注意,如果输入为偶数n的2n,则末尾将没有+2项(所有+2均由-2平衡),而如果输入为奇数,则将末尾为+2项(所有+2均由-2平衡)。
现在,让我们转向问题的另一个方面。系统不会要求您查询重复的个别条款。要求您查询在一系列输入范围内评估的重复总数。我们在这里得到D项的交替和与差的事实确实非常有趣。例如,f(10)+ f(11)+ f(12)是什么?好吧,我们知道f(11)= D(11),我们可以直接计算。而且我们还知道f(10)和f(12)是E(10)和E(12)。并观察如果评估E(10)+ E(12)会发生什么:
E(10)+ E(12)
=(D(9)-D(7)+ D(5)-D(3)+ D(1)+ 2)+(D(11)-D(9)+ D(7)-D (5)+ D(3)-D(1))
= D(11)+(D(9)-D(9))+(D(7)-D(7))+(D(5)-D(5))+(D(3) -D(3))+(D(1)-D(1))+ 2
= D(11)+ 2。
现在那很有趣。请注意,除D(11)项和+2项外,所有其他项均已取消!更一般而言,这可能使我们猜测关于简化E(n + 2)+ E(n)有一些规则。其实有。具体来说:
E(2n)+ E(2n + 2)= D(2n + 1)+ 2
这意味着,如果我们要对一个范围内的许多连续值求和,则每对相邻的偶数项将立即简化为D(2n + 1)+ 2的形式。
这里还有更多工作要做。例如,您需要能够总结大量D(n)项,并且需要考虑所有+2项的影响。我会留给你找出答案。
一个提示:要求您返回的所有值都是模数P。这意味着值序列为0,D(1),D(1)+ D(3),D(1)+ D(3)+ D(5),D(1)+ D(3)+ D(5)+ D(7)等,最终必须再次达到0(mod P)。您既可以计算在发生这种情况之前必须发生多少项,也可以通过仅显式计算这些值来写下在执行此操作时遇到的所有值。这样一来,您就可以连续汇总大量连续的D项-您可以按周期长度修改项数,然后在表中查找剩余的和。
希望这会有所帮助!