No hay un "one-size-fits-all" algoritmo general, pero hay un par de principios que pueden ayudar. Aquí están algunos (por favor, siéntase libre de añadir más en los comentarios):
- Cuando se trata de un módulo como 10m, puede ayudar a considerar por separado en su primer factores de potencia, en este caso 2m5m, y, a continuación, utilizar el Teorema del Resto Chino para combinarlos.
- El teorema de Euler: si gcd, a^{\phi(n)} \equiv 1 \mod n donde \phi es de Euler totient función.
- Repetición: k^x \equiv j^x \mod n si k \equiv j \mod n. Por lo tanto si m es un múltiplo de a n, decir m = c n,\sum_{k=1}^m k^x \equiv c \sum_{j=1}^n j^x \mod n.
- Reordenamiento: si \gcd(n,a) = 1, luego
\sum_{k=1}^n k^x \equiv \sum_{k=1}^n (a k)^x \equiv a^x \sum_{k=1}^n k^x \mod n
por lo (1-a^x) \sum_{k=1}^n k^x \equiv 0 \mod n
Así, si no es a tal que a a^x-1 son coprime a n, obtenemos \sum_{k=1}^n k^x \equiv 0 \mod n.
- Faulhaber la fórmula que expresa el \sum_{k=1}^m k^x como un polinomio en m grado x+1, con término constante 0. Por supuesto, tenemos que ser cuidadosos en el uso de este con aritmética modular, debido a que los coeficientes son números racionales.
Por cierto, en el caso que nos ocupa, el uso de Faulhaber la fórmula podemos resolver el problema:
\sum_{j=1}^{10^{1000}} j^{1000} \equiv 3 \times 10^{999} \mod 10^{1000}
EDITAR:
Faulhaber expresa \sum_{j=1}^{10^{1000}} j^{1000} como un polinomio en n = 10^{1000} 502 cero términos, pero ninguno de los denominadores
son divisibles por 2^2 o 5^2, tan sólo el término en n^1 tiene una oportunidad de ser distinto de cero mod n: este término es
B_{1000} n donde B_{1000} 1000'th número de Bernoulli.
El resultado es 10^{1000} B_{1000} \mod 10^{1000} = 3 \times 10^{999}.