F(0)=X
我获得了F(i)=(A⋅F(i−1)^2 + B⋅F(i−1) + C)%1000000
和1≤i≤N
。
现在给予N
,A
,B
,C
和X
,如何有效地找到所有N
元素?
我需要将这些N个元素分成2组,其中最大元素在第1组中,第2组中第2组,第1组中第3大等等......并且最后需要找到总和的绝对差值两组元素。
我可以在不计算所有元素的情况下找到这种差异,因为N可以与10^7
和A
,B
,C
,X
一样大最多100。
答案 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位。