#!/usr/local/bin/perl -w

use Math::Big qw(primes);
use Math::Pari qw(factorint);

@primes = primes(100);    # los 100 primeros primos

# $prodp=$prod2=1;
# for $i (@primes){
#     $prodp *= $i;
# }
# $prod2 = 2**100;
# print "$prodp\n$prod2\n";
# print "1234567890"x4, "\n";

while (<DATA>){
    chomp;
    last if (/__END__/);
    $count++;
    $nombre[$count]=$_;
    $n[$count]=shift @primes;
    $hash{$n[$count]} = $nombre[$count];
    print "$count) $nombre[$count] -> $n[$count]\n";
}

print "Número de formación: ";
chomp ($num = <STDIN>);
$resp=1;
if ($num =~ /\*/){
    $num = eval($num);
}elsif ($num =~ /\,/){
    for $i (split /,/,$num){
	$resp *= $n[$i];
    }
    $num = $resp;
}
die "Wrong, I need a number" if (!defined $num || $num<2 ||
    $num != int $num || $num+0 ne $num);

print "El código asociado es $num\n";
$resp = factorint( $num );
print "$resp\n";
$resp =~ s/(\d+)\,/$hash{$1},/g;
print "$resp\n";
@resp = split /;/, $resp;
for $i (@resp){
    print "$i\n";
}
		  
		  
    
__DATA__
Prevención de riesgos
Ofimática básica
Matemáticas financieras
Inglés
Creación de páginas html
Linux
Administración linux
Programación Perl
Programas CGI
Alemán
Chino
__END__

Es un experimento para codificar la formación recibida de tal manera que 
  el código sea creciente y que identifique cada curso con la simple
  factorización.
Tiene la ventaja sobre la codificación binaria que un curso puede recibirse
  más de una vez y ser recogido por el código sin ambigüedades. 
BUGS
  La lista de cursos debe figurar por orden de importancia
  No sé si será capaz sin usar bignum de manejar listas largas
  
