Índice (Logaritmo Discreto) em Perl

Publicado por Perfil removido (última atualização em 26/04/2013)

[ Hits: 3.491 ]

Download indice-001.pl




O problema do índice se resume a:

"Dado dois inteiros N e B, qual o menor expoente I tal que B elevado à I e dividido por N tenha resto igual a 1?"

Se ao invés deste resto 1 for usado um valor R, com o valor de R estando entre 0 e N-1 tem-se então o problema do logaritmo discreto.

Para B=2 e N=31, I vale 5.  => 2,4,8,16,32 => 32/31 resto = 1

Para B=4 e N=60, não existe resposta válida. => 4, 16, 64 => 64/60 resto 4 e permanece num ciclo fechado.

Ou 64%60 = 4, que é como se escreve em algumas linguagens.

Este programa calcula índice por brute-force.

  



Esconder código-fonte

#!/usr/bin/perl

use strict;
use warnings;


sub indice {

   my ($base, $mod) = (shift, shift);
   my ($index, $acum) = (1, $base % $mod);

   $base %= $mod;

   do {

      $acum *= $base;
      $acum %= $mod;
      $index++;

   } until ($acum == $base || $acum == 1);

   ($acum==1) ? return $index : return -1;

}

my $B = 5;
my $N = 64;
my $I = indice($B, $N);

print "$I\n";

Scripts recomendados

Gravar CDROM

randmusic.pl

Remover lista de pacotes do Portage

Eterm sem bordas

Mega Sena


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts