094 Almost equilateral triangles.pl 692 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 17 August 2016
  4. # License: GPLv3
  5. # Website: https://github.com/trizen
  6. # https://projecteuler.net/problem=94
  7. # Runtime: 0.015s
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. my $n = 1;
  12. my $sum = 0;
  13. my $limit = 1_000_000_000;
  14. while (1) {
  15. my $x = (((7 - 4 * sqrt(3))**$n)
  16. + (7 + 4 * sqrt(3))**$n + 1) / 3;
  17. my $y = ((sqrt(3) + 2) * (7 - 4 * sqrt(3))**($n + 1)
  18. - (sqrt(3) - 2) * (7 + 4 * sqrt(3))**($n + 1) - 1) / 3;
  19. my $p1 = 3 * $x + 1;
  20. my $p2 = 3 * $y - 1;
  21. last if ($p1 > $limit and $p2 > $limit);
  22. $sum += $p1 if $p1 <= $limit;
  23. $sum += $p2 if $p2 <= $limit;
  24. ++$n;
  25. }
  26. say $sum;