009 Special Pythagorean triplet.sf 957 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 10 October 2017
  4. # https://github.com/trizen
  5. # A Pythagorean triplet is a set of three natural numbers, a < b < c, for which: a^2 + b^2 = c^2
  6. # For example:
  7. # 3^2 + 4^2 = 9 + 16 = 25 = 5^2.
  8. # There exists exactly one Pythagorean triplet for which a + b + c = 1000.
  9. # Find the product abc.
  10. # https://projecteuler.net/problem=9
  11. # Runtime: 0.135s
  12. func pythagorean_triplet(limit) {
  13. for n in (1..limit) {
  14. for m in (n+1 .. limit -> by(2)) {
  15. gcd(n, m) == 1 || next
  16. var x = (m**2 - n**2)
  17. var y = 2*n*m
  18. var z = (m**2 + n**2)
  19. for (var k = 1; true ; ++k) {
  20. var a = k*x
  21. var b = k*y
  22. var c = k*z
  23. break if (a+b+c > limit)
  24. if (a+b+c == limit) {
  25. return a*b*c
  26. }
  27. }
  28. }
  29. }
  30. }
  31. say pythagorean_triplet(1000)