Если вы можете использовать Java 8 (и действительно хотите), вы можете использовать лямбда-выражения для решения этой проблемы:
private static int gcd(int x, int y) {
return (y == 0) ? x : gcd(y, x % y);
}
public static int gcd(int... numbers) {
return Arrays.stream(numbers).reduce(0, (x, y) -> gcd(x, y));
}
public static int lcm(int... numbers) {
return Arrays.stream(numbers).reduce(1, (x, y) -> x * (y / gcd(x, y)));
}
Я ориентировался на Ответ Джеффри Хантина , но
- рассчитал ЖКД функционально
- использовал синтаксис varargs для более простого API (я не был уверен, будет ли корректно работать перегрузка, но это работает на моей машине)
- преобразовал gcd
numbers
-Array в функциональный синтаксис, который стал более компактным и более легким для чтения IMO (по крайней мере, если вы привыкли к функциональному программированию)
Этот подход, вероятно, немного медленнее из-за дополнительных вызовов функций, но это, вероятно, не будет иметь значения вообще для большинства случаев использования.