J'ai une sériesomme de la série géométrique (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
Je veux trouver la somme. Je ne peux pas appliquer la formule Progression Géométrique (PG) car le résultat aura alors un dénominateur et ensuite je devrai trouver l'inverse modulaire qui peut ne pas exister (si le dénominateur et m ne sont pas en coprime). J'ai donc fait un algorithme alternatif en supposant que ces puissances feraient un cycle de longueur beaucoup plus petit que k (parce que c'est une équation modulaire et donc j'obtiendrais quelque chose comme 2,7,9,1,2, 7,9,1 ....) et ce cycle se répètera dans la série ci-dessus. Donc, au lieu d'itérer de 0 à k, je trouverais simplement la somme des nombres dans un cycle, puis calculerais le nombre de cycles dans la série ci-dessus et les multiplierais. Donc, j'ai d'abord trouvé i^m (mod m)
et ensuite multiplié ce nombre encore et encore en prenant modulo à chaque étape jusqu'à ce que j'atteigne à nouveau le premier élément.
Mais quand j'ai réellement codé l'algorithme, pour certaines valeurs de i, j'ai eu des cycles de très grande taille. Et donc pris beaucoup de temps avant de se terminer et donc mon hypothèse est incorrecte.
Y a-t-il un autre modèle que nous pouvons trouver? (Fondamentalement, je ne veux pas itérer sur k.) Alors s'il vous plaît donnez-moi une idée d'un algorithme efficace pour trouver la somme.
Quelle est la « formule GP à laquelle vous vous référez? Casual Googling n'a pas trouvé de réponse. Pouvez-vous fournir une URL appropriée? Pouvez-vous vous rappeler de fournir des URL appropriées à chaque fois, aussi, s'il vous plaît. –
J'aimerais aussi savoir quelle formule vous essayez d'appliquer. –
La formule GP est sum (k = 0 à n, a * r^k) = a * (r^n - 1)/(r - 1) Voir http://en.wikipedia.org/wiki/ Geometric_progression – Geerad