Pythagorean Triplets
Problem 9 Project Euler
A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
a2 + b2 = c2
For example, 32 + 42 = 9 + 16 = 25 = 52.
There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.
O(n) Solution snippet
static long TripletOn(int n) { long product = -1; for(int a = 1; a < = n / 3; a++) { int b = (n * n - 2 * n * a)/(2 * n - 2 * a); int c = n - a - b; if(a * a + b * b == c * c) { if(a * b * c > product) product = a * b * c; } } return product; }
O(n2) Solution snippet
static double Triplet(int n) { double max=0; if(n < =0) return -1; for(double i=1; i < n/3; i++) { for(double j=i+1; j < n; j++) { var c2 = i*i +j*j; var c = Math.Pow(c2,.5); if(i+j+c==Convert.ToDouble(n)) { var z =i*j*c; if(z > max) { max=z; } } } } return max>0 ? max:-1; }
Full Code
using System; using System.Collections.Generic; using System.IO; using System.Linq; class Solution { static void Main(String[] args) { int t = Convert.ToInt32(Console.ReadLine()); for(int a0 = 0; a0 < t; a0++){ int n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(TripletOn(n)); } } static double Triplet(int n) { double max=0; if(n<=0) return -1; for(double i=1; i< n/3; i++) { for(double j=i+1; j< n; j++) { var c2 = i*i +j*j; var c = Math.Pow(c2,.5); if(i+j+c==Convert.ToDouble(n)) { var z =i*j*c; if(z > max) { max=z; } } } } return max > 0 ? max:-1; } static long TripletOn(int n) { long product = -1; for(int a = 1; a < = n / 3; a++) { int b = (n * n - 2 * n * a)/(2 * n - 2 * a); int c = n - a - b; if(a * a + b * b == c * c) { if(a * b * c > product) product = a * b * c; } } return product; } }
Live Code on Ide One
Comments
Post a Comment