#!/usr/bin/perl

# $i ** $j  (mod $n)
sub pot_mod {
    use integer;
    my ( $i, $j, $n ) = @_;

    my $wynik = $i - $i + 1;
    return $wynik unless $j;

    my $pot2 = $i;

    while ( 1 ) {
        if ( $j%2 ) {
            $wynik = ($pot2 * $wynik) % $n;
            return $wynik unless --$j;
        }
        $j /= 2;
        $pot2 = ($pot2 * $pot2) % $n;
    }
}

print pot_mod(3, 2, 5), "\n";
