prime
changeset 6 ad2ed8ef3e21
parent 5 51950b0c040d
child 7 6a025d656935
equal deleted inserted replaced
5:51950b0c040d 6:ad2ed8ef3e21
    17 die "$ME: Sorry, number >= 2 expected!\n"
    17 die "$ME: Sorry, number >= 2 expected!\n"
    18   if $number < 2;
    18   if $number < 2;
    19 
    19 
    20 #1. find all divisors of $number
    20 #1. find all divisors of $number
    21 my @divisors = findDivisors($number);
    21 my @divisors = findDivisors($number);
    22 print "Die Teiler von $number sind: @divisors\n";
    22 
       
    23 #print "Die Teiler von $number sind: @divisors\n";
    23 
    24 
    24 #2. delete all non primes
    25 #2. delete all non primes
    25 my @primes = findPrimes(@divisors);
    26 my @primes = findPrimes(@divisors);
    26 print "Die Primzahlteile von $number sind: @primes\n";
    27 
       
    28 #print "Die Primzahlteile von $number sind: @primes\n";
    27 
    29 
    28 # not sure about the name of the function! // .hs
    30 # not sure about the name of the function! // .hs
    29 @primes = factorize($number, @primes);
    31 @primes = factorize($number, @primes);
    30 
    32 
    31 if (@primes) {
    33 print join("*", @primes), "\n";
    32     print join("*", @primes), "\n";
       
    33 }
       
    34 else {
       
    35     warn "Sorry, $number is prime itself!\n";
       
    36 }
       
    37 
    34 
    38 exit;
    35 exit;
    39 
    36 
    40 #### SUBROUTINES #####
    37 #### SUBROUTINES #####
    41 
    38 
    42 sub findDivisors {
    39 sub findDivisors {
    43     my $i = 2;
    40     my $i = 2;
    44     my $m = $_[0];
    41     my $m = $_[0];
    45 
    42 
    46     my @divisors = ();
    43     my @divisors;
    47 
    44     for (my $i = 2 ; $i <= $m ; $i++) {
    48     while ($i < $m) {
       
    49         if ($m % $i == 0) {
    45         if ($m % $i == 0) {
    50             @divisors = (@divisors, $i);
    46             push @divisors, $i;
    51         }
    47         }
    52         $i++;
       
    53     }
    48     }
    54     return @divisors;
    49     return @divisors;
    55 }
    50 }
    56 
    51 
    57 sub findPrimes {
    52 sub findPrimes {
    59 
    54 
    60     foreach my $div (@_) {
    55     foreach my $div (@_) {
    61 
    56 
    62         #find all divisors of div and save in subprimes
    57         #find all divisors of div and save in subprimes
    63         my @subprimes = findDivisors($div);
    58         my @subprimes = findDivisors($div);
    64 
    59         if (@subprimes == 1) { push @primes, $div }
    65         if (!@subprimes) { push @primes, $div }
       
    66     }
    60     }
    67     return @primes;
    61     return @primes;
    68 }
    62 }
    69 
    63 
    70 sub factorize {
    64 sub factorize {
    73 
    67 
    74     my @result;
    68     my @result;
    75     foreach my $prime (@primes) {
    69     foreach my $prime (@primes) {
    76         while (0 == ($current % $prime)) {
    70         while (0 == ($current % $prime)) {
    77             push @result, $prime;
    71             push @result, $prime;
    78             $current = $current / $prime;
    72             $current /= $prime;
    79 
       
    80             # better:
       
    81             # $current /= $prime;
       
    82         }
    73         }
    83     }
    74     }
    84 
    75 
    85     return @result;
    76     return @result;
    86 }
    77 }