• Publicidad

Algoritmo de Euclides

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Algoritmo de Euclides

Notapor dacons » 2006-05-08 13:37 @609

Hola, ¿alguien sabe cómo se resuelve el mcd al revés?

Si c=mcd(a,b) ¿cómo se puede calcular la 'x' y la 'y' de la función

c=ax + by

por más ejemplos que miro no me entero de cómo resolverlo, el mcd está calculado con el algoritmo de Euclides y esta función se calcula justo al revés, pero ¿cómo?
dacons
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-02-27 04:15 @219

Publicidad

Notapor kidd » 2006-05-08 16:17 @720

Hola.

No entiendo bien tu pregunta, pero aquí te va una manera de encontrar el máximo común divisor con el algoritmo de Euclides que encontré por ahí:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub euclid {
  2.      my( $a, $b ) = @_;
  3.      return ($b) ? euclid( $b, $a % $b ) : $a;
  4. }
  5.  
  6. my $mcd = (18,9);  # Es 9
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor creating021 » 2006-05-08 16:59 @749

kidd:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub euclid {
  2.      my( $a, $b ) = @_;
  3.      return ($b) ? euclid( $b, $a % $b ) : $a;
  4. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

my $mcd = (8,3); # ¿Es 3? Según el algoritmo, sí

dacons:
c = mcd(a,b);
x = mcm(a);
y = mcm(b);


Mira:
9 = 18, 9
9 = 18x - 9y
y = 9-18x/9 =>
9 = (18*2)+(9*-3)


Bueno, no sé, de pronto sea eso.

Suerte
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor dacons » 2006-05-09 15:22 @682

La solución es esa, ¿pero cómo llegas a ella?

El algoritmo de Euclides es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
if a < b  #intercambiar valores

while b != 0
  r= a mod b
  a=b
  b=r

return a
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Y ahora para llegar a tu solución supuestamente el método consiste en ir despejando el resto de la última solución que es el mcd de arriba.

¿Mediante código cómo sacarías el 2?
dacons
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-02-27 04:15 @219

Notapor creating021 » 2006-05-09 16:34 @732

¡He!, no sé, pero según el algoritmo si a = 3 y b = 4 la respuesta es 4 y no 12.

Bueno, pero como dije, **NO LO SÉ**

:lol:
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor kidd » 2006-05-09 17:27 @769

Hola.

La primera función que te puse para conseguir el MCD con el algoritmo de Euclides no funciona bien, la correcta es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub gcd {
  2.     my ( $a, $b ) = @_;
  3.  
  4.     ( $a, $b ) = ( $b, $a ) if $a > $b;
  5.  
  6.     while ($a) {
  7.         ( $a, $b ) = ( $b % $a, $a );
  8.     }
  9.     return $b;
  10. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahora, te recomiendo le eches un vistazo al módulo Math::Algebra::Symbols.

http://search.cpan.org/~prbrenan/Math-A ... rGuide.pod

Con el puedes realizar operaciones algebraicas, que es lo que necesitas en tu caso.


Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados