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