Какие математические вычисления выполняет этот Java-код?

Я не могу понять, какую математическую функцию решает этот код. Может кто-нибудь объяснить мне?

int m = 12;
int n = 81;
while (m != n)
{
    if (m > n)
        m -= n;
    else
        n -= m;
}
System.out.println("m = " + m);

/* 12 != 81: true, 12 > 81: false, n = 81 - 12 = 69
12 != 69: true, 12 > 69: false, n = 69 - 12 = 57
12 != 57: true, 12 > 57: false, n = 57 - 12 = 45
12 != 45: true, 12 > 45: false, n = 45 - 12 = 33
12 != 33: true, 12 > 33: false, n = 33 - 12 = 21
12 != 21: true, 12 > 21: false, n = 21 - 12 = 9
12 != 9: true,12 > 9: true, m = 12 - 9 = 3
3 != 9: true, 3 > 9: false, n = 9 - 3 = 6
3 != 6: true, 3 > 6: false, n = 6 - 3 = 3
3 != 3: false
m = 3 */

Просто предположение, а может быть, это для нахождения наибольшего общего делителя?

David 20.04.2024 19:26

@ Дэвид, правильно.

Sören 20.04.2024 19:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
2
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это более старый алгоритм, называемый алгоритмом Евклида , позволяющий найти наибольший общий делитель (НОД) двух чисел.

Алгоритм Евклида — более эффективный способ найти НОД двух чисел. Этот код работает, беря два целых числа, m и n, а затем многократно вычитая меньшее из двух чисел из большего, пока они не станут равными. Согласно правилу общее значение — это наибольший общий делитель исходных двух чисел.

В коде m начинается с 12, а n — с 81. Вы многократно вычитаете меньшее число из большего, пока они не станут равными. В конце m становится 3, а n становится 3. Поскольку m теперь равно n, цикл заканчивается (твоё while условие цикла m!=n). Значение m или n — это наибольший общий делитель исходных двух чисел, равный 3.

Возможно, вам просто захочется поискать алгоритм Евклида для лучшего понимания.

Tijil Saka 20.04.2024 19:40

Не уверен, что я бы назвал то, чему 2300 лет, «старым алгоритмом», а не «самым старым алгоритмом». Особенно если вы не собираетесь специально называть более современные алгоритмы. Точно так же, если вы говорите, что это «более эффективно», пожалуйста, укажите названия алгоритмов, по сравнению с которыми он более эффективен. В противном случае это не «более» эффективно, а просто эффективно.

Mike 'Pomax' Kamermans 20.04.2024 19:54

Другие вопросы по теме