Si encuentra un algoritmo, que le dice por qué enteros (2, 3, ..n) CUALQUIER número aleatorio puede dividirse, y si el algoritmo puede crecer sistemáticamente para calcular desviaciones más grandes, ¿este algoritmo tendrá prueba aritmética? para p = np?

Si bien su terminología es imprecisa, cuando se interpreta adecuadamente, la respuesta es no.

En teoría de la complejidad, hay 3 clases de problemas de decisión relativamente fáciles de entender:

P consiste en problemas para los cuales se conoce un algoritmo de tiempo polinómico.

NP consiste en problemas en los que existe un algoritmo de tiempo polinómico para verificar un certificado que afirma la verdad del problema de decisión.

NP-complete consiste en los problemas de NP “más difíciles”. Esencialmente, si un problema de NP completo admite una solución en tiempo polinómico, entonces cualquier otro problema de NP puede resolverse también en tiempo polinómico.

Primero pregunta si tal algoritmo para encontrar divisores resolvería el “problema de factorización”. La respuesta a esto es sí si todo se indica correctamente. De hecho, declarado como un problema de decisión, el problema de factorización es exactamente determinar si un número [math] n [/ math] tiene un divisor de tamaño como máximo [math] k [/ math].

Sin embargo, su línea final “y, por lo tanto, la prueba para P = NP” no es lógicamente correcta. La razón de esto es que el problema de factorización está en NP, pero no se sabe que esté en NP completo. No hay pruebas conocidas de que la factorización sea tan difícil como algunos problemas difíciles conocidos. En particular, es posible que se pueda lograr la factorización de tiempo polinomial, pero eso sigue siendo P! = NP.

Además de la respuesta del usuario de Quora, que dice correctamente que factorizar el tiempo polinomial no prueba P = NP, el método que propuso ni siquiera factoriza el tiempo polinomial. Puedo demostrar un algoritmo que exhibe las propiedades que mencionas pero que no tiene en cuenta el tiempo polinómico.

boolean factor(int num) { for (int i = 2; i < n; i++) { if (num % i == 0) { return true; } } return false; } 

¿Cuánto tiempo lleva esto en función de la longitud de entrada? (Esto es lo importante, no cuánto tiempo lleva en función de n). Bueno, i está limitado por la constante n, y la división por una constante requiere tiempo lineal, por lo que este algoritmo realiza n operaciones de tiempo lineal, que es un número constante de operaciones de tiempo lineal. Por lo tanto, este algoritmo toma tiempo lineal para cualquier n .

¿Hemos resuelto la factorización en tiempo lineal? No, para cualquier solución n este algoritmo no resuelve el problema de factorización para todos los enteros, solo algunos de ellos. Para resolver el problema para todos los enteros, necesitaría reemplazar n con algo como [math] \ sqrt {\ text {num}} [/ math], y de repente su algoritmo se vuelve exponencial.