Problem: Write a Java program to find the lcm of an array (i.e. lcm of more than 2 numbers).

Example:

```Input:  [8, 2, 4, 16]
Output: 16

Input:  [21, 7, 6]
Output: 42```

To find the lcm of an array we will use GCD because, for any two numbers, the following relationship holds true:

LCM(n1, n2)= (n1*n2)/GCD(n1, n2)

But this is not valid for more than 2 numbers:

LCM(n1, n2, n3)= (n1*n2*n3)/GCD(n1, n2, n3)

Thus to find lcm of the whole array (more than 2 numbers), we will deal with two numbers at a time and use its result for the next number.

We will loop through the array and use `Lcm of previous two numbers * array[n] / GCD` as follows:

``````import java.util.*;

class Main {
public static void main(String[] args) {
int array[] = {8, 4, 2, 16};

//initialize LCM and GCD with the first element
int lcm = array;
int gcd = array;

//loop through the array to find GCD
//use GCD to find the LCM
for(int i=1; i<array.length; i++){
gcd = findGCD(array[i], lcm);
lcm = (lcm*array[i])/gcd;
}

//output the LCM
System.out.println("LCM: "+lcm);
}

//recursive function to find GCD of two numbers
public static int findGCD(int a, int b){
//base condition
if(b == 0)
return a;

return findGCD(b, a%b);
}
}``````

Output:

LCM: 16

Explanation:

Suppose LCM of the first two numbers of the array (i.e, array and array) is lcm1, for next iteration we find the LCM of lcm1 and array as lcm2, then for the 3rd iteration, LCM of lcm2 and array as lcm3 and so on.

The last LCM value (i.e. LCM of lcm(n-1) and array[n]) gives the LCM of the whole array.