is_power.pl 664 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/perl
  2. # Implementation of the `is_power(n, k)` function,
  3. # which returns true when `a^k = n` for some integer `a`.
  4. use 5.014;
  5. use strict;
  6. use warnings;
  7. use lib qw(../lib);
  8. use Math::AnyNum qw(iroot ipow is_power irand);
  9. sub my_is_power {
  10. my ($n, $k) = @_;
  11. ipow(iroot($n, $k), $k) == $n;
  12. }
  13. my $pow = shift(@ARGV) // irand(3, 4);
  14. my @bools = qw(false true);
  15. foreach my $i (-1000 .. 1000) {
  16. my $b1 = is_power($i, $pow); # this is built-in
  17. my $b2 = my_is_power($i, $pow); # this is user-defined
  18. say $i if $b2;
  19. $b1 = $bools[!!$b1];
  20. $b2 = $bools[!!$b2];
  21. if ($b1 ne $b2) {
  22. say "!! $i -- ($b1, $b2)";
  23. }
  24. }