# powmod($a, $f, $m) calculates $a**$f % $m, # precondition: 1 < $m, 0 < $f, $a are integers representable as a perl integer sub powmod { my($a, $f, $m) = @_; my $r = 1; for (;;) { 0 != ($f & 1) and $r = mulmod($r, $a, $m); $f >>= 1; 0 == $f and last; $a = mulmod($a, $a, $m); } $r; } } { # simple factoring my @primes; { my($n, $p, $sqrp); NLOOP: for $n (2 .. 100_100) { $sqrp = sqrt($n) + 0.5; for $p (@primes) { $sqrp < $p and last; 0 == $n % $p and next NLOOP; } push @primes, $n } } my $greatest_prime_squared = $primes[-1]**2;