// F# [<EntryPoint>] let main argv = let rec ( ** ) x n = match n < 1 with | true -> 1 | false -> x * (x ** (n-1)) let rec sumDigits x = match x with | x when x < 10 -> (x, 1) | x -> let res = x / 10 |> sumDigits ((res |> fst) + (x % 10), (res |> snd) + 1) let isArmstrong x = let digitsInfo = sumDigits x x = (fst digitsInfo) ** (snd digitsInfo) let a = System.Console.ReadLine() |> System.Int32.Parse let b = System.Console.ReadLine() |> System.Int32.Parse let result = [a..b] |> List.filter (isArmstrong) printf "Result: %A" result System.Console.ReadKey true |> ignore 0
Идем по программе от конца к началу. Программа выводит значения x=1 и y=0. y = b-x ⇒ b = y+x=0+1 = 1 Значение b = 1 найдено. x = (a+2*b) div 5; (a+2*1) div 5 = 1; (a+2) div 5 = 1 Отметим, что div - это операция целочисленного деления, которая отбрасывает остаток. Допустим, остаток был нулевой, тогда а+2 = 5 ⇒ a=3 Но остаток мог быть и ненулевым! При делении на 5 остатком могут быть числа от 0 до 4, следовательно, в числителе могло быть значение на 1,2,3 или 4 большее, т.е. значение а могло быть не только 3, но и 4,5,6,7. ответ:
[<EntryPoint>]
let main argv =
let rec ( ** ) x n =
match n < 1 with
| true -> 1
| false -> x * (x ** (n-1))
let rec sumDigits x =
match x with
| x when x < 10 -> (x, 1)
| x ->
let res = x / 10 |> sumDigits
((res |> fst) + (x % 10), (res |> snd) + 1)
let isArmstrong x =
let digitsInfo = sumDigits x
x = (fst digitsInfo) ** (snd digitsInfo)
let a = System.Console.ReadLine() |> System.Int32.Parse
let b = System.Console.ReadLine() |> System.Int32.Parse
let result = [a..b] |> List.filter (isArmstrong)
printf "Result: %A" result
System.Console.ReadKey true |> ignore
0
Программа выводит значения x=1 и y=0.
y = b-x ⇒ b = y+x=0+1 = 1
Значение b = 1 найдено.
x = (a+2*b) div 5; (a+2*1) div 5 = 1; (a+2) div 5 = 1
Отметим, что div - это операция целочисленного деления, которая отбрасывает остаток. Допустим, остаток был нулевой, тогда а+2 = 5 ⇒ a=3
Но остаток мог быть и ненулевым! При делении на 5 остатком могут быть числа от 0 до 4, следовательно, в числителе могло быть значение на 1,2,3 или 4 большее, т.е. значение а могло быть не только 3, но и 4,5,6,7.
ответ: