Оглавление > Особая тройка Пифагора (F#)
14.02.2023

Особая тройка Пифагора (F#)

Тройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство a2 + b2 = c2 Например, 32 + 42 = 9 + 16 = 25 = 52. Существует только одна тройка Пифагора, для которой a + b + c = 1000. Найдите произведение abc.

Решение

  • объявим вспомогательную функцию возведения в квадрат sq
  • для a объявим последовательность от 2 до 500, т.к. по условию b больше a
  • для каждого числа a проверим существует ли такое число b , для которого выполняется условие a2 + b2 = (1000 - a - b)2
  • если существует, то вернем пару (a,b)
  • иначе перейдем к следующему
  • из пары чисел a и b вычислим c = (1000 - a - b) и найдем произведение
  • выведем ответ
let sq a = a * a

let a = seq { 2..500 }

let ab =
    a |> Seq.pick (fun x ->
        let x1 =
            seq { x + 1 .. 999 - 2 * x }
            |> Seq.tryFind (fun y -> sq x + sq y = sq (1000 - x - y))

        match x1 with
        | Some y -> Some (x, y)
        | None -> None)

let answer = ab |> fun (a, b) -> a * b * (1000 - a - b) 

printfn $"the answer is {answer}" //the answer is 31875000
  • кому инетересно, это числа 2002 + 3752 = 4252