Autor Tema: Mathematica: Obtener 2 factores primos.

0 Usuarios y 1 Visitante están viendo este tema.

17 Marzo, 2014, 06:49 pm
Leído 4574 veces

xamo

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 373
  • Karma: +0/-0
  • Sexo: Femenino
Hola,

tengo un número "pequeño"  \(  x \) de alrededor de 60 cifras y tengo que conseguir dos números primos que al multiplicar resulte \(  x \) . ¿Sabéis de alguna instrucción en Mathematica?

Saludos.

17 Marzo, 2014, 08:47 pm
Respuesta #1

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
¿Estás intentando inventar un algoritmo para quebrar RSA?  ;D

La función FactorInteger[n] devuelve la descomposición en factores primos de n.
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

18 Marzo, 2014, 12:26 am
Respuesta #2

xamo

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 373
  • Karma: +0/-0
  • Sexo: Femenino
En la asignatura de Códigos y Criptografía creo que lo vamos a ver. Mi problema es que un profesor ha subido un archivo de nombre un número y ha dicho que se abre así.  :banghead:

Gracias por contestar pero se me queda todo el rato "Running" :(

El número es:
Spoiler
5599483340338967015396973417457475628658716197581670119391634941359925054281
[cerrar]
, lo he dejado una horita y nada. ¿Es normal?

Saludos.

18 Marzo, 2014, 07:18 pm
Respuesta #3

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
El número es:
Spoiler
5599483340338967015396973417457475628658716197581670119391634941359925054281
[cerrar]
, lo he dejado una horita y nada. ¿Es normal?

Ese número tiene 76 cifras, no 60 como anunciabas en tu mensaje inicial. Hasta 60 cifras parece que FactorInteger[] devuelve el resultado en tiempo razonable.

¿En verdad tu profesor les pidió que descompusieran ese número en factores primos? No es una tarea sencilla.

¿No lo habrá hecho con la intención de que comprendieran por qué es tan difícil quebrar RSA? Pues la utilidad de RSA es justamente ésa: que dado un número entero \( n=pq \) producto de dos primos "grandes", no se puede saber cuáles son \( p \) y \( q \). En la realidad ese número \( n \) tiene alrededor de 400 cifras; en este caso tiene tan sólo 76 pero no deja de ser un problema para nada trivial.

Si la diferencia \( |p-q| \) es pequeña o muy grande obtener esa factorización puede ser viable. Podrías intentar implementar alguno de los algoritmos conocidos para ver si estás ante uno de esos casos, pero supongo que ya deben estar implementados en esa función FactorInteger[], así que no sé... De todas maneras, no está demás intentar.

Para aquél que le gusten los desafíos y ande con tiempo, es un problema interesante. Yo, por lo pronto, no me comprometo.

Saludos.
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

18 Marzo, 2014, 11:07 pm
Respuesta #4

xamo

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 373
  • Karma: +0/-0
  • Sexo: Femenino
Muchas gracias por todo. Lo más gracioso es que el profesor no es ni de Códigos y Criptografía, si no que ha decidio subirnos bibliografía recomendada así. Un poco peculiar...  :-\ Así que tampoco tengo los conocimientos necesarios.

A ver si alguien más puede ayudar.

Saludos.  :)

19 Marzo, 2014, 09:29 am
Respuesta #5

teeteto

  • Lathi
  • Mensajes: 2,575
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
  • Dormirás por una eternidad ¡Despierta!
    • Oller Unizar
¿Has comprobado si es primo?
Eso debiera ser más rápido.
Debemos saber...sabremos (David Hilbert)

19 Marzo, 2014, 09:36 am
Respuesta #6

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

 La función PrimeQ de matemática indica si un número es o no primo; rápidamente en este caso indica que NO es primo.

 Después de dejar toda la noche el ordenador "currando", los factores primos de:

\( 5599483340338967015396973417457475628658716197581670119391634941359925054281 \)

 son:

\( 5756130429098929077956071497934215419 \)

y

\( 972786042517719014174576083150881276299 \)

Saludos.

19 Marzo, 2014, 10:41 am
Respuesta #7

aureodd

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 253
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Matemáticas Recreativas, Juegos, Lógica, Ingenio, Matemáticos
Hola,
creo que puede ilustrar este tema el información contenida en
http://es.wikipedia.org/wiki/Test_de_primalidad_AKS
Sabemos que para encontrar a mano si un número \( p  \) es primo o no, lo vamos dividiendo por todos los primos inferiores a \( p \) (el número de primos inferiores a un número lo podemos aproximar mediante una función logarítmica http://es.wikipedia.org/wiki/Teorema_de_los_n%C3%BAmeros_primos) y menores que \( \sqrt{p}

 \)
Lo que mejora el test AKS es que solo hay que llegar hasta  \( \sqrt{\phi(r)}\log_2(p) \)
Saludos

19 Marzo, 2014, 01:51 pm
Respuesta #8

pierrot

  • pabloN
  • Moderador Global
  • Mensajes: 3,447
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Después de dejar toda la noche el ordenador "currando", (...)

 :o

¿Usaste FactorInteger[] o lo conseguiste con una rutina tuya? En caso de que haya sido con Mathematica, ¿cuánto tiempo tardó? No creí que arrojara el resultado. Con

Timing[FactorInteger[5599483340338967015396973417457475628658716197581670119391634941359925054281]]

da el tiempo exacto en segundos que tarda, por si alguien quiere probar (yo lo haré cuando llegue a casa  :laugh:).
$_="loe  hnachaPkr erttes,urJ";$j=0;for($i=0;s/(.)(.{$j})$//;$i++){$_=$2.$_,$j+=1-$i%2,print$1}print

19 Marzo, 2014, 03:26 pm
Respuesta #9

xamo

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 373
  • Karma: +0/-0
  • Sexo: Femenino
¡¡Muchísimas gracias a todos!! Por fin he podido descomprimir el archivo  :D :D :D

Pero me gustaría saber si has usado algo que no sea FactorInteger[] por si me vuelve a ocurrir, saberlo hacer yo sola.

Gracias y saludos.  :D