Índice (Logaritmo Discreto) em Perl

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

[ Hits: 3.418 ]

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

Audacious X-Chat Plugin

MyBF - Interpretador de BrainFuck

Remover lista de pacotes do Portage

Monitor Process

Algoritmo de Euclides estendido em Perl


  

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