Hay 2 congruencias importantes que debes saber:
- [matemáticas] (x + y + z) \ mod m = ((x \ mod m) + (y \ mod m) + (z \ mod m)) \ mod m [/ math]
- [matemáticas] (x * y) \ mod m = ((x \ mod m) * (y \ mod m)) \ mod m [/ matemáticas]
Esto nos dice que podemos calcular cada [matemática] a ^ i \ mod m [/ matemática] por separado y sumarlas.
[matemáticas] a ^ i \ mod m = a ^ {i-1} * a \ mod m [/ matemáticas]
- ¿Por qué es Forth el lenguaje de programación para practicar la escritura de algoritmos?
- ¿Qué es el WordNet? ¿Cuál es la relación entre WordNet y el algoritmo Leacock & Chodorow?
- ¿Qué lenguaje, libro o técnica es el mejor punto de partida cuando estás frustrado con tus habilidades de programación y quieres tener una sólida formación en algoritmos y estructuras de datos?
- ¿Cuál es la forma más eficiente para que un programador sea bueno en algoritmos sin participar en competencias de programación?
- Cómo resolver un problema usando C ++
Entonces, podemos calcularlos iterativamente y mantener un contador con el resultado.
Sin embargo, con la entrada dada, realmente no necesitamos calcularlos todos. Podemos observar que
[matemáticas] a ^ 0 = 2 ^ 0 = 1 = 1 \ mod 7 [/ matemáticas]
[matemáticas] a ^ 1 = 2 ^ 1 = 2 = 2 \ mod 7 [/ matemáticas]
[matemáticas] a ^ 2 = 2 ^ 2 = 4 = 4 \ mod 7 [/ matemáticas]
[matemáticas] a ^ 3 = 2 ^ 3 = 8 = 1 \ mod 7 [/ matemáticas]
Y el patrón se repite con el período 3.
Entonces, el resultado es [matemáticas] ((1 + 2 + 4) * 1666 + 1 + 2) \ mod 7 [/ matemáticas].
[matemáticas] 1 + 2 + 4 = 7 [/ matemáticas] que es [matemáticas] 0 \ mod 7 [/ matemáticas]. Entonces el resultado es 3.