¿Cuáles son algunas propiedades simples o resultados en la teoría de números que a menudo forman la base de muchos acertijos de programación?

En primer lugar, aparentemente esta no es una lista exhaustiva. Pero estos son los que he encontrado en concursos de programación competitiva y sitios de preguntas de entrevistas. Intentaré mantenerlo lo más corto posible. Daré los enlaces de Wikipedia para los algoritmos ya que explicarlos en detalle hará que la respuesta sea demasiado larga. Puede encontrar varias implementaciones si solo las busca en Google. Pero le sugiero que comprenda los teoremas antes de codificarlos.

Algoritmo de Euclides para GCD: esto es algo que aprendimos en la escuela secundaria y, sin embargo, cuando se nos pide encontrar mcd o mcm, generalmente terminamos escribiendo la solución de fuerza bruta. Hay muchos teoremas basados ​​y relacionados con este. Wikipedia enumera muchos de ellos. Algoritmo euclidiano

Algoritmo de Euclid extendido: Esta es una extensión del algoritmo de Euclid para gcd. Esto generalmente se usa para calcular x e y para ecuaciones de la forma.

Este algoritmo se usa generalmente para encontrar soluciones enteras de ecuaciones lineales.
Algoritmo Euclidiano Extendido

Ecuaciones de diofantina: las preguntas aritméticas modulares son bastante comunes. A menudo encontramos ecuaciones lineales de diofantina que pueden resolverse nuevamente mediante el algoritmo de Euclides extendido.
Pero incluso si reemplazamos el 1 por algo k, puede resolverlo por 1 y luego multiplicar las respuestas por k.
Las ecuaciones de la forma (a * x mod b) = k pueden reescribirse como ax + by = k.
Ecuación diofantina

6. Teorema del resto chino: problemas típicos de la forma “Encuentre un número que cuando se divide por 2 hojas, resto 1, cuando se divide por 3 hojas, resto 2, cuando se divide por 7 hojas, resto 5”, etc., puede reformularse en un sistema de congruencia lineal y luego se puede resolver usando el teorema del resto chino.
Por ejemplo, el problema anterior se puede expresar como un sistema de tres congruencias lineales: “x ≡ 1 (mod 2), x ≡ 2 mod (3), x ≡ 5 mod (7)”.
Teorema del resto chino

7. Inverso modular: los inversos modulares a menudo son necesarios en muchos problemas, como encontrar el número de permutaciones en algunos P.
Inverso multiplicativo modular
Modular inverso – Código Rosetta

8. Tamiz de Eratóstenes: este es el algoritmo que genera todos los números primos hasta cierto número N en O (N). También hay otra versión de este llamado tamiz segmentado para generar primos dentro de un rango dado.
Tamiz de Eratóstenes

9. Prueba de primalidad de Miller-Rabin: creo que el nombre se explica por sí mismo.
Prueba de primalidad de Miller-Rabin

10. Cálculo de nCr% M: una forma muy eficiente de hacer esto se describe en este foro de discusión de Codechef. Utiliza el teorema de Lucas para acelerar el algoritmo.
Algos más conocidos para calcular nCr% M

11. Cálculo de nPr% M: puede hacerlo generando el nCr% M primero y luego multiplicándolo con (r!)% M.

12. Transformada rápida de Fourier para una multiplicación polinómica rápida: aún no lo he leído, pero el nombre se explica por sí mismo y Wikipedia debería tener una buena explicación.

13. Exponenciación por cuadratura: esta es una manera fácil de implementar y extremadamente eficiente de exponenciación.

Pero también se puede usar un enfoque similar para calcular el enésimo término de una serie recursiva. La representación matricial proporciona la siguiente expresión cerrada para los números de Fibonacci:

Aquí puede encontrar el lado derecho utilizando el algoritmo anterior.

Estos son todo lo que puedo pensar en este momento. Sé que me he perdido muchos, pero los agregaré cuando los recuerde. También hay demasiadas cosas relacionadas con la geometría para cubrir. Así que no voy a entrar en eso ahora. Pero hay muchos problemas basados ​​en el cálculo de las expectativas. Para esas preguntas, debe tener una comprensión clara de las expectativas. Simplemente tome cualquier libro sobre probabilidad. Esto es un ejemplo
Cómo abordar el desafío Vertical Sticks

Créditos: Wikipedia, codechef, stackexchange.

More Interesting

¿Qué sería el resto cuando [matemáticas] x ^ {12} -x ^ 6 + 1 [/ matemáticas] se divide por [matemáticas] x ^ 2-1 [/ matemáticas]?

Si [matemática] x [/ matemática] y [matemática] y [/ matemática] son ​​enteros positivos, [matemática] x <y [/ matemática], [matemática] x + y = 667 [/ matemática] y [matemática] LCM (x, y) = 120GCD (x, y) [/ math], ¿qué son [math] x [/ math] y [math] y [/ math]?

¿Cómo podemos encontrar el valor de una función beta en los enteros m, n? ¿Cómo podemos encontrar B (m, n) sin usar la función gamma o cualquier otra función?

Cómo demostrar que si [matemática] a, b [/ matemática] son ​​dos números naturales distintos, al menos uno entre [matemática] a, b, a + b, ab [/ matemática] es divisible por [matemática] 3 [ /matemáticas]

Un objetivo circular tiene regiones de puntuación de 5 y 7 puntos. ¿Cuál es el puntaje más grande que no se puede obtener?

¿Qué cursos de matemática se deben tomar en los años de pregrado y posgrado si se planea especializarse en teoría de números?

¿Cómo resolverías [matemáticas] 2 ^ n + n = m! [/ Matemáticas] sobre enteros positivos?

¿Cómo se procesan a && by a || b en la programación en C si a y b son números enteros?

¿Cuál es el resto de [matemáticas] \ dfrac {9 + 99 ^ 2 + 999 ^ 3 + 9999 ^ 4 + 99999 ^ 5} {77} [/ matemáticas]?

Deje que [math] p (x) [/ math] sea un polinomio distinto de cero con un coeficiente entero. Si [math] p (n) [/ math] es divisible por [math] n [/ math] para cada entero positivo [math] n [/ math], ¿cuál es el valor de [math] p (0) [/ matemáticas]?