What is the smallest number divisible by each of the numbers 1 to 20?
There are several ways to solve this problem. I chose to compute the Least Common Multiple of two numbers using their Greatest Common Divisor:
Using Euclid's algorithm, the F# code for gcd is:
let rec gcd a b =
match a with
| a when a = 0L -> b
| a when a < b -> gcd (b-a) a
| a -> gcd (a-b) a
And lcm is just as easy:
let lcm a b = (a*b)/gcd a b
Then we can write the code that solves the problem:
seq {1L..20L} |> Seq.fold lcm 1L |> printfn "lcm = %A"
The fold operation calculates a running lcm. At each step the result of the previous step is passed to the lcm function with the current element in the sequence of integers.
No comments:
Post a Comment