unos años, se comprobó que PRIMES is in P. ¿Hay algún algoritmo que implemente their primality test en Python? Quería ejecutar algunos puntos de referencia con un generador ingenuo y ver por mí mismo qué tan rápido es. Lo implementaría yo mismo, pero todavía no entiendo el papel lo suficiente como para hacerlo.AKS Primes algoritmo en Python hace
Respuesta
respuesta rápida: no, la prueba AKS no es la manera más rápida para poner a prueba de primalidad. Hay mucho mucho más rápidas pruebas de primalidad que, o bien asumen el (generalizada) hipótesis de Riemann y/o se asignaron al azar. (Por ejemplo Miller-Rabin es rápido y fácil de implementar.) El verdadero avance del papel era teórica, lo que demuestra que existe un algoritmo deterministaen tiempo polinómico para primalidad pruebas, sin asumir la GRH u otras conjeturas no probadas.
Dicho esto, si se quiere entender y poner en práctica que, Scott Aaronson's short article podría ayudar. No entra en todos los detalles, pero puede comenzar en la página 10 de 12, y da suficiente. :-) También hay un list of implementations (principalmente en C++) aquí.
Además, para la optimización y mejoras (en varios órdenes de magnitud), es posible que desee ver en this report, o (más) Crandall and Papadopoulos's report, o (aún mayores) Daniel J Bernstein's report. Todos ellos tienen pseudocódigo bastante detallado que se presta bien a la implementación.
Actualización: Otra buena exposición de las matemáticas, por Terence Tao, aquí: http://terrytao.wordpress.com/2009/08/11/the-aks-primality-test/ – ShreevatsaR
El AKS-Test no es el más rápido manera, pero es la primera prueba a prueba de tontos para los números primos. – Progo
@Progo: más precisamente, es la primera prueba que podemos * demostrar * es a prueba de tontos * y * tiempo de polinomio. Hay otras pruebas que creemos firmemente * son * en realidad perfectamente a prueba de tontos (por ejemplo, porque es posible probar que asumen conjeturas fuertemente creídas como la Hipótesis de Riemann), y también hay otras pruebas que podemos * demostrar * son perfectamente a prueba de tontos, y que casi invariablemente funcionan rápido, pero que no podemos * demostrar * son tiempo polinomial. El gran avance de AKS fue hacer ambas cosas. – ShreevatsaR
Sí, ir a buscar a AKS test for primes página en rosettacode.org
def expand_x_1(p):
ex = [1]
for i in range(p):
ex.append(ex[-1] * -(p-i)/(i+1))
return ex[::-1]
def aks_test(p):
if p < 2: return False
ex = expand_x_1(p)
ex[0] += 1
return not any(mult % p for mult in ex[0:-1])
print('# p: (x-1)^p for small p')
for p in range(12):
print('%3i: %s' % (p, ' '.join('%+i%s' % (e, ('x^%i' % n) if n else '')
for n,e in enumerate(expand_x_1(p)))))
print('\n# small primes using the aks test')
print([p for p in range(101) if aks_test(p)])
y la salida es:
# p: (x-1)^p for small p
0: +1
1: -1 +1x^1
2: +1 -2x^1 +1x^2
3: -1 +3x^1 -3x^2 +1x^3
4: +1 -4x^1 +6x^2 -4x^3 +1x^4
5: -1 +5x^1 -10x^2 +10x^3 -5x^4 +1x^5
6: +1 -6x^1 +15x^2 -20x^3 +15x^4 -6x^5 +1x^6
7: -1 +7x^1 -21x^2 +35x^3 -35x^4 +21x^5 -7x^6 +1x^7
8: +1 -8x^1 +28x^2 -56x^3 +70x^4 -56x^5 +28x^6 -8x^7 +1x^8
9: -1 +9x^1 -36x^2 +84x^3 -126x^4 +126x^5 -84x^6 +36x^7 -9x^8 +1x^9
10: +1 -10x^1 +45x^2 -120x^3 +210x^4 -252x^5 +210x^6 -120x^7 +45x^8 -10x^9 +1x^10
11: -1 +11x^1 -55x^2 +165x^3 -330x^4 +462x^5 -462x^6 +330x^7 -165x^8 +55x^9 -11x^10 +1x^11
# small primes using the aks test
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Este no es el algoritmo AKS; este es un algoritmo de ** tiempo exponencial ** que implementa la idea elemental detrás del algoritmo AKS sin ninguna de las ideas que lo hacen polinomial. – ShreevatsaR
- 1. Algoritmo Hopcroft-Karp en Python
- 2. Algoritmo Python k-means
- 3. algoritmo para python itertools.permutations
- 4. ¿Qué hace | = (ior) en Python?
- 5. Algoritmo de Gauss-Legendre en python
- 6. binario algoritmo de búsqueda en Python
- 7. ¿Qué algoritmo emplea Python en fractions.gcd()?
- 8. AdaBoost ML algoritmo python implementación
- 9. Traducir Algoritmo C a Python
- 10. Práctica de programación simple (Fizz Buzz, Print Primes)
- 11. En python, ¿qué hace len (list)?
- 12. ¿Qué hace exactamente + = do en python?
- 13. ¿Qué hace% a las cadenas en Python?
- 14. ¿Qué hace el rendimiento en Python 2.7?
- 15. Python: utilizando un algoritmo recursivo como generador
- 16. Implementación del algoritmo científico python en Amazon ec2
- 17. Implementación de Python del algoritmo OPTICS (Clustering)
- 18. Implementación de Python del algoritmo de Viterbi
- 19. Python - Algoritmo de encontrar espacios de tiempo
- 20. rendimiento de algoritmo de mezcla Python
- 21. Python: acelere un algoritmo Star Path Pathfinder
- 22. Algoritmo de relleno de inundación Python
- 23. Algoritmo de C++ como 'groupby' de python
- 24. ¿La recolección de basura hace que python sea más lento?
- 25. ¿Qué hace el objeto Python Ellipsis?
- 26. ¿Qué hace la evaluación de Python()?
- 27. `fromtimestamp` de Python hace un salto discreto
- 28. ¿Cómo se hace Python/PostgreSQL más rápido?
- 29. Cómo actualizar solo una celda específica en las primes de datos dataTable
- 30. ¿Qué hace el operador <> en python?
AKS es de gran importancia teórica pero su rendimiento es terrible (Miller-Rabin es mucho mejor). Hay muchas pruebas de primalidad implementadas en Python. – jfs