085 Counting rectangles.pl 584 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 20 August 2016
  5. # Website: https://github.com/trizen
  6. # https://projecteuler.net/problem=85
  7. # Runtime: 0.043s
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use ntheory qw(binomial);
  12. my $t = 2_000_000;
  13. my $m = 'inf';
  14. my $v = [0, 0];
  15. my ($x, $y) = (int(sqrt($t)), 1);
  16. while (1) {
  17. my $p = binomial($x + 1, 2) * binomial($y + 1, 2);
  18. my $d = abs($p - $t);
  19. if ($d < $m) {
  20. $v = [$x, $y];
  21. $m = $d;
  22. }
  23. $x >= $y ? ($p > $t ? --$x : ++$y) : last;
  24. }
  25. say "(@{$v}) = ", $v->[0] * $v->[1];