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
- ¿Es realmente el caso de que el orden de la permutación implicado por el ‘patrón de permutación’ (gire la secuencia 1 2 … n de adentro hacia afuera) en n elementos es siempre <= n? ¿Por qué?
- ¿Cuál es una explicación intuitiva para la ley de grupo para la adición de curvas elípticas?
- ¿Dónde está el 29% restante de todos los enteros positivos?
- ¿Por qué los matemáticos creían que el último teorema de Fermat era cierto cuando no había pruebas disponibles? Si Fermat no tenía pruebas, ¿cómo tuvo la idea de establecer un teorema que fuera realmente cierto y probado después de 300 años?
- Cómo generar toda la secuencia en este problema matemático
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.