我有一个系列
S = i^(m) + i^(2m) + ............... + i^(km) (mod m)
0 <= i < m, k may be very large (up to 100,000,000), m <= 300000
我想找到总和。我不能应用几何级数(GP)公式,因为结果将有分母,然后我将不得不找到可能不存在的模逆(如果分母和 m 不是互质的)。
所以我做了一个替代算法,假设这些幂将使一个长度远小于 k 的循环(因为它是一个模方程,所以我会得到类似 2,7,9,1,2,7,9 的东西, 1....)并且该循环将在上述系列中重复。因此,与其从 0 迭代到 k,我只需找到一个循环中的数字总和,然后计算上述系列中的循环数并将它们相乘。所以我首先找到i^m (mod m)
这个数字,然后在每一步中一次又一次地取模,直到我再次到达第一个元素。
但是当我实际编写算法时,对于 i 的某些值,我得到了非常大的循环。因此在终止之前花费了大量时间,因此我的假设是不正确的。
那么我们还能找到其他模式吗?(基本上我不想迭代k。)所以请给我一个有效算法的想法来找到总和。