Test de primalidade: Diferenzas entre revisións
Contido eliminado Contido engadido
arranxos varios |
retiro ligazóns cara os artigos da wiki.es |
||
Liña 7:
{{sen categoría}}
{{revisión}}
[[Ficheiro:Mersene39.png|miniatura|O 39º [[
A cuestió''n'' da determinación de se un [[número]] n dado é [[Número primo|primo]] é coñecida como o problema da primalidade. Un '''test de primalidade''' (ou '''recoñecemento da primalidade''') é un [[algoritmo]] que, dado un número de entrada n, non consegue verificar a [[hipótese]] dun [[teorema]] cuxa conclusión é que n é [[Número composto|composto]].
Liña 13:
== Introdución ==
Os problemas que implican ás matemáticas discretas están entre os máis difíciles das matemáticas. Concretamente o da factorización é un problema para o que aínda non se atopou unha solución que se poida acoutar en [[
Por outra banda, algunhas aplicacións das matemáticas que utilizan o problema da factorización precisan dunha serie de números primos moi grandes escollidos de forma aleatoria. O algoritmo para obter un número primo aleatorio moi grande sería algo así:
Liña 19:
O tempo de finalización deste algoritmo non é determinado, pero existe unha alta probabilidade de que finalice en tempo polinomico a condición de que haxa suficientes números primos e estes estean distribuídos de forma máis ou menos uniforme. Afortunadamente para as aplicacións que precisan números primos aleatorios, isto é así. Vexamos por qué.
O primeiro que podemos establecer é que o cardinal do conxunto de primos no conxunto dos [[Número natural|números naturais]]
Claro que, si os números primos están uniformemente distribuídos, pero hai un número pequeno deles, a procura podería ser imposible na práctica. Para resolver este segundo problema podemos acudir ao [[
Do visto até aquí podemos co''n''cluír que o algoritmo anterior pode obter unha resposta en tempo polinomico se existe un algoritmo polinomial para comprobar que un número n arbitrariamente grande é primo. O que nos devolve ao problema da primalidade.
Liña 32:
Os problemas da factorización dun número dado e a determinación de números primos son moi antigos. Os rexistros históricos sobre o estudo de números primos remónt[[Século -III|a]]<nowiki/>nse a [[Euclides]] ([[Século -III|século III]] a. C.) [[Século -VI|a]]<nowiki/>índa que hai evidencias de que o coñecemento da existencia destes números tan particulares poderíase remontar a [[Pitágoras]] ([[Século -VI|século VIN]] a. [[Século -VI|C.]]).
Con todo, o primeiro procedemento matemático coñecido concernente estes números remóntase a [[Eratóstenes]] ([[Século -II|século II]] a. C.) e é a coñecida [[
Hoxe en día, este algoritmo ten un valor máis histórico que práctico. Funciona ben, pero é moi ineficiente.
A mellora máis obvia atén á forma na que o algoritmo termina (curiosamente Eratóstenes non tivo en conta este feito e foi o matemático árabe [[
Outro problema da criba é que non responde o problema da simple determinación de primalidade dun número dado, senón que ofrece unha lista (potencialmente
O problema, máis concreto, de determinar si un número n dado é primo pode derivarse do anterior, simplemente simúlase a criba para n-1 e compróbase si permanece nela. A cuestión é que o custo de seguir este procedemento é moi grande.
Como moitas outras achegas matemáticas, o problema da primalidade chegou á Europa moderna a través dos árabes, pero non foi até moitos séculos despois que apareceron os primeiros rexistros escritos sobre a primalidade e a súa solución. Estes corresponden ao matemático italiano [[Leonardo Fibonacci|Leonardo de Pisa]] (Fibonacci) quen presentou un algoritmo moi simple para determinar si un número n dado é primo consistente en comprobar que ningún outro número primo inferior á raíz cadrada de n divíde a <math>n</math>. Este algoritmo ten a característica de ser determinista (sempre obtén unha solución) aínda que tremendamente ineficiente. En realidade, Fibonacci é máis coñecido pola sucesión que leva o seu nome e que tamén ten o seu papel no problema que nos ocupa. Logo veremos algo máis sobre a famosa [[
O primeiro en utilizar relacións observadas entre os números para determinar a primalidade foi o boloñés [[
Un [[número perfecto]] é aquel que é igual á suma das súas divisores propios. Por exemplo 6 é perfecto, xa que a suma das súas divisores (1+2+3) é igual ao mesmo. O sete primeiros números perfectos son 6, 28, 496, 8128, 33550336, 8589869056 e 137438691328.
Liña 54:
Contemporáneo de Mersenne e moito máis importante para a historia e a estado da arte actual do problema que estamos a tratar foi o importante matemático [[Pierre de Fermat]] (1607-1665). Fermat é posiblemente o teórico numérico máis renombrado da historia e é moi coñecido por un teorema que esencialmente estivo sen demostración durante máis de trescentos anos. Con referencia á primalidade, Fermat tivo correspondencia con Mersenne e, de feito, estableceu un resultado sobre os números primos que é esencial para as técnicas modernas de determinación da primalidade.
Fermat buscaba números n>1 que lle axudasen a comprobar a primalidade dos [[
Outro eminente matemático que estivo interesado no problema da primalidade foi o suízo [[Leonhard Euler|Leonhard Euler.]] Euler sentiu atraído polos resultados de Fermat.
Houbo outros matemáticos tamén moi eminentes que traballaron no campo da factorización de números, por exemplo [[
== Tests verdadeiros de primalidade ==
Nos apartados anteriores falouse de dous problemas relacionados (factorización e primalidade) que dalgunha maneira son complementarios. Con todo, as dúas cuestións son de natureza moi distinta. Para convencer a alguén de que un número foi factorizado é suficiente con mostrar os factores e o resultado queda claro. Con todo convencer a esa mesma persoa de que un número dado é primo pode ser moito máis difícil. Como o matemático parisiense do [[século XIX]] [[
Esta é a visión do matemático; desde o punto de vista do enxeñeiro as cousas non son brancas ou negras. Por iso, convimos en diferenciar os tests (ou recoñecementos) das probas. Antes de proseguir, chegou o momento de definir formalmente ambos os conceptos.<blockquote style=" width:90%; padding: 0.8em; border: 1px solid #880000; background-color: #FFFFFF;">
Liña 75:
O interese, fundamentalmente, é a aplicación práctica das técnicas. Con todo, é interesante ver algo sobre as probas. Nesta primeira sección ocúpase destas e dalgúns do test clásicos de primalidade, deixando para un apartado posterior unha discusión sobre o grupo de algoritmos complementario que, aínda que non proban a primalidade con certidumbre matemática resultan moito máis interesantes ao ser computablemente máis estables e predicibles.
Para empezar, o exemplo clásico de test verdadeiro de primalidade: o [[
Este resultado é importa''n''te, xa que presenta a proba como unha secuencia sinxela de pasos lineal en n onde todas as operacións básicas (produtos, restas, módulos, comparacións) son computables en tempo polinómico.
Liña 87:
Existe un resultado menos xeral que o de Pocklington que é debido a outro matemático do século XIX (o teorema de Proth). Pero como se dixo é menos xeral e ten a mesma aplicación, polo que non entraremos en detalles.
A última proba neste apartado débese a Pepin (1877). O [[
''A'' constante 3 en realidade pódese substituír por calquera enteiro positivo para o que un operador chamado [[
Así como a proba LKL só se pode aplicar aos números de Mersenne, a proba de Pepin só se pode aplicar aos números de Fermat, polo que o seu uso (como no caso de LKL) queda bastante restrinxido.
== Tests probabilísticos ==
Os tests probabilísticos están baseados na idea de relaxar a corrección da proba para conseguir un comportamento de resposta [[
O primeiro exemplo de test probabilístico que veremos é o [[Test de primalidade de Fermat|test de Fermat.]] Devandito test está baseado no PTF. O algoritmo baseado neste test aplícase elixindo varios enteiros aleatorios entre 2 e n-2 e calculando .<math>a</math><math>r \equiv a^{n-1} \pmod n</math> Si algún valor de é distinto de 1 o algoritmo devolve composto, noutro caso devolve primo.<math>r</math> A fortaleza deste test radica en que tras un número normalmente pequeno de repeticións a probabilidade de que un número composto pase como primo é moi pequena.
Como vimos na sección anterior, o test de Fermat adoece dun coñecido problema: os [[
Outro test moi coñecido e utilizado en criptografía é o [[
== Avances recentes ==
Liña 119:
O recente descubrimento dun algoritmo determinista de tempo polinomial que non se basea en ningunha conxectura non probada debe ser considerado un fito importante. Concretamente en agosto do ano [[2002]] tres académicos da Universidade de Kanpur (Agrawal, Kayal e Saxena) presentaron un algoritmo determinista de clase P para a determinación da primalidade dun número.<ref>Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin: "<small>PRIMES</small> is in <small>P</small>". </ref> A clave do algoritmo é unha versión simplificada do PTF, isto é a condición:<center><math>(x-a)^p \equiv (x^p-a) \pmod{x^r-1,\;p}</math></center>Os autores arranxáronllas para formular o seguinte algoritmo, que se probou pode executarse nun tempo de complexidade máxima de .<math>\mathcal{O}((\log \, n)^{\frac{21}{2}} f(\log \; \log \, n))</math>
Os autores demostraron ademais que, si determinados números primos (chamados [[Número primo de Sophie Germain|números primos de Sophie Germain]]) teñen a distribución conxeturada polo matemático austriaco [[
</ref><math>\mathcal{O}((\log \, n)^{6+\epsilon})</math>
Liña 125:
== Referencias ==
* Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford: ''Introduction to Algorithms.'' Sección 31.8: "Primality testing", pp.887–896. MIT Press & McGraw-Hill, 2a edición, [[2001|2001.]] (
* Crandall, Richard & Pomerance, Carl: Prime Numbers: A Computational Perspective Capítulo 3: "Recognizing Primes and Composites", pp.109–158. Capítulo 4: "Primality Proving", pp.159–190. Sección 7.6: "Elliptic curve primality proving (ECPP)", pp.334–340. Springer, 1a edición, 2001. ([[:es:Special:BookSources/0387947779|ISBN 0-387-94777-9]].)
* Knuth, Donald. ''The Art of Computer Programming'', Volume 2: ''Seminumerical Algorithms.'' Páxinas 391–396 de sección 4.5.4. Addison-Wesley, 3a edición, 1997. (
* Williams, H.C.: ''Édouard Lucas and Primality Testing.'' John Wiley & Sons, 1998. (
=== Notas ===
|