que tiene una serieCálculo suma de la serie geométrica (mod m)
S = i^(m) + i^(2m) + ............... + i^(km) (mod m)
0 <= i < m, k may be very large (up to 100,000,000), m <= 300000
Quiero encontrar la suma. No puedo aplicar la fórmula de progresión geométrica (GP) porque el resultado tendrá denominador y luego tendré que encontrar la inversa modular que puede no existir (si el denominador y m no son coprimos).
Así que hice un algoritmo alternativo suponiendo que estos poderes harán un ciclo de longitud mucho menor que k (porque es una ecuación modular y obtendría algo así como 2,7,9,1,2, 7,9,1 ....) y ese ciclo se repetirá en la serie anterior. Entonces en lugar de iterar de 0 a k, simplemente encontraría la suma de números en un ciclo y luego calcularía el número de ciclos en la serie anterior y los multiplicaría. Así que primero encontré i^m (mod m)
y luego multipliqué este número una y otra vez tomando módulo en cada paso hasta que alcancé el primer elemento nuevamente.
Pero cuando en realidad codifiqué el algoritmo, para algunos valores de i, obtuve ciclos que eran de gran tamaño. Y por lo tanto, me tomó una gran cantidad de tiempo antes de terminar y, por lo tanto, mi suposición es incorrecta.
¿Hay algún otro patrón que podamos descubrir? (Básicamente no quiero iterar sobre k.) Así que por favor dame una idea de un algoritmo eficiente para encontrar la suma.
¿Cuál es la 'fórmula GP ¿A qué te refieres? La búsqueda en Google casual no arrojó una respuesta. ¿Puedes proporcionar una URL adecuada? ¿Recuerda proporcionar URL apropiadas cada vez, también, por favor? –
También me gustaría saber qué fórmula está tratando de aplicar. –
La fórmula GP es suma (k = 0 a n, a * r^k) = a * (r^n - 1)/(r - 1) Ver http://en.wikipedia.org/wiki/ Geometric_progression – Geerad