#!/usr/bin/perl

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

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

    my $pow2 = $i;

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

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