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[0];
int gcd = array[0];

//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[0] and array[1]) is lcm1, for next iteration we find the LCM of lcm1 and array[2] as lcm2, then for the 3rd iteration, LCM of lcm2 and array[3] 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.