public static long Solution() { long solution = 0; long mLimit = (long)1e4; HashSet <long> squares = new HashSet <long>(); for (long m = 2; m < mLimit; m++) { long kLimit = (long)Math.Sqrt(limit / (m * m * m) + 1); var step = 2 - (m % 2); for (long r = 1; r < m; r += step) { if (UtilityFunctions.Gcd(m, r) != 1) { continue; } if (m * m * m * r + r * r >= limit) { break; } for (long k = 1; k <= kLimit; k++) { long n = k * k * m * m * m * r + k * r * r; if (n >= limit) { break; } if (UtilityFunctions.IsPerfectSquare(n)) { if (!squares.Contains(n)) { solution += n; squares.Add(n); } } } } } return(solution); }
public static long Solution() { long solution = 0; for (int a = 1; a <= limit; a++) { for (int c = 1; c <= a; c++) { for (int b = 1; b <= limit; b++) { for (int d = 1; d <= b; d++) { var internalPoints = ((a + c) * (b + d) - UtilityFunctions.Gcd(a, b) - UtilityFunctions.Gcd(b, c) - UtilityFunctions.Gcd(c, d) - UtilityFunctions.Gcd(d, a)) / 2 + 1; if (UtilityFunctions.IsPerfectSquare(internalPoints)) { solution += 4; if (a == c || b == d) { solution -= 2; if (a == c && b == d) { solution -= 1; } } } } } } } return(solution); }
public static long SolutionOld() { long answer = 0; var validPairs = new Dictionary <long, HashSet <long> >(); var validSums = new HashSet <long>(); for (long p = 2; p < limit; p++) { for (long q = 1; q < p; q++) { if (p + q > limit) { break; } if (p % 2 == 1) { if ((q % 2 == 1) && (p * q) % 4 != 3) { continue; } if (q % 4 == 2) { continue; } } else { if ((p % 4 == 2) && (q % 2 == 1)) { continue; } } var aSquare = (p * p + q * q + p * q); if (!UtilityFunctions.IsPerfectSquare(aSquare)) { continue; } if (validPairs.ContainsKey(p)) { validPairs[p].Add(q); if (validPairs.ContainsKey(q)) { long sum = long.MaxValue; foreach (var r in validPairs[q]) { if (validPairs[p].Contains(r)) { var bSquare = p * p + r * r + p * r; var cSquare = r * r + q * q + r * q; if (bSquare + cSquare < aSquare) { var bc = Math.Sqrt(bSquare * cSquare); if (bSquare + cSquare + bc < aSquare) { continue; } } sum = p + q + r; if (sum < limit) { validSums.Add(sum); Console.WriteLine($"{p} {q} {r} {sum}"); } } } } } else { validPairs.Add(p, new HashSet <long> { q }); } } } foreach (var sum in validSums) { answer += sum; } return(answer); }