Как найти нок двух чисел программа

Математика – важная часть программирования и информатики. Это ядро ​​любого хорошего алгоритма, обеспечивающее аналитические навыки, необходимые для программирования.

Математические алгоритмы также являются очень важной темой для собеседований по программированию. В этой статье вы узнаете, как найти GCD и LCM двух чисел с помощью C ++, Python, C и JavaScript.

Как найти НОД двух чисел

Наибольший общий делитель (GCD) или наивысший общий делитель (HCF) двух чисел – это наибольшее положительное целое число, которое идеально делит два заданных числа. Вы можете найти НОД двух чисел, используя алгоритм Евклида.

В алгоритме Евклида большее число делится на меньшее число, затем меньшее число делится на остаток от предыдущей операции. Этот процесс повторяется до тех пор, пока остаток не станет 0.

Например, если вы хотите найти НОД 75 и 50, вам необходимо выполнить следующие действия:

  • Разделите большее число на меньшее и возьмите остаток.
 75 % 50 = 25
  • Разделите меньшее число на остаток от предыдущей операции.
 50 % 25 = 0
  • Теперь остаток становится 0, таким образом, НОД 75 и 50 равны 25.

Программа на C ++ для поиска НОД двух чисел

Ниже приведена программа на C ++ для поиска НОД двух чисел:

 // C++ program to find GCD/HCF of 2 numbers
#include <iostream>
using namespace std;
// Recursive function to find GCD/HCF of 2 numbers
int calculateGCD(int num1, int num2)
{
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
// Driver Code
int main()
{
int num1 = 34, num2 = 22;
cout << "GCD of " << num1 << " and " << num2 << " is " << calculateGCD(num1, num2) << endl;
int num3 = 10, num4 = 2;
cout << "GCD of " << num3 << " and " << num4 << " is " << calculateGCD(num3, num4) << endl;
int num5 = 88, num6 = 11;
cout << "GCD of " << num5 << " and " << num6 << " is " << calculateGCD(num5, num6) << endl;
int num7 = 40, num8 = 32;
cout << "GCD of " << num7 << " and " << num8 << " is " << calculateGCD(num7, num8) << endl;
int num9 = 75, num10 = 50;
cout << "GCD of " << num9 << " and " << num10 << " is " << calculateGCD(num9, num10) << endl;
return 0;
}

Выход:

 GCD of 34 and 22 is 2
GCD of 10 and 2 is 2
GCD of 88 and 11 is 11
GCD of 40 and 32 is 8
GCD of 75 and 50 is 25

Программа Python для поиска НОД двух чисел

Ниже приведена программа Python для поиска НОД двух чисел:

 # Python program to find GCD/HCF of 2 numbers
def calculateGCD(num1, num2):
if num2==0:
return num1
else:
return calculateGCD(num2, num1%num2)
# Driver Code
num1 = 34
num2 = 22
print("GCD of", num1, "and", num2, "is", calculateGCD(num1, num2))
num3 = 10
num4 = 2
print("GCD of", num3, "and", num4, "is", calculateGCD(num3, num4))
num5 = 88
num6 = 11
print("GCD of", num5, "and", num6, "is", calculateGCD(num5, num6))
num7 = 40
num8 = 32
print("GCD of", num7, "and", num8, "is", calculateGCD(num7, num8))
num9 = 75
num10 = 50
print("GCD of", num9, "and", num10, "is", calculateGCD(num9, num10))

Выход:

 GCD of 34 and 22 is 2
GCD of 10 and 2 is 2
GCD of 88 and 11 is 11
GCD of 40 and 32 is 8
GCD of 75 and 50 is 25

Программа на C для поиска НОД двух чисел

Ниже приведена программа на языке C для поиска НОД двух чисел:

 // C program to find GCD/HCF of 2 numbers
#include <stdio.h>
// Recursive function to find GCD/HCF of 2 numbers
int calculateGCD(int num1, int num2)
{
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
// Driver Code
int main()
{
int num1 = 34, num2 = 22;
printf("GCD of %d and %d is %d ⁠⁠n" , num1 , num2, calculateGCD(num1, num2));
int num3 = 10, num4 = 2;
printf("GCD of %d and %d is %d ⁠⁠n" , num3 , num4, calculateGCD(num3, num4));
int num5 = 88, num6 = 11;
printf("GCD of %d and %d is %d ⁠⁠n" , num5 , num6, calculateGCD(num5, num6));
int num7 = 40, num8 = 32;
printf("GCD of %d and %d is %d ⁠⁠n" , num7 , num8, calculateGCD(num7, num8));
int num9 = 75, num10 = 50;
printf("GCD of %d and %d is %d ⁠⁠n" , num9 , num10 , calculateGCD(num9, num10));
return 0;
}

Выход:

 GCD of 34 and 22 is 2
GCD of 10 and 2 is 2
GCD of 88 and 11 is 11
GCD of 40 and 32 is 8
GCD of 75 and 50 is 25

Программа на JavaScript для поиска НОД двух чисел

Ниже приведена программа на JavaScript для поиска НОД двух чисел:

 // JavaScript program to find GCD/HCF of 2 numbers
// Recursive function to find GCD/HCF of 2 numbers
function calculateGCD(num1, num2) {
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
// Driver Code
var num1 = 34, num2 = 22;
document.write("GCD of " + num1 + " and " + num2 + " is " + calculateGCD(num1, num2) + "<br>");
var num3 = 10, num4 = 2;
document.write("GCD of " + num3 + " and " + num4 + " is " + calculateGCD(num3, num4) + "<br>");
var num5 = 88, num6 = 11;
document.write("GCD of " + num5 + " and " + num6 + " is " + calculateGCD(num5, num6) + "<br>");
var num7 = 40, num8 = 32;
document.write("GCD of " + num7 + " and " + num8 + " is " + calculateGCD(num7, num8) + "<br>");
var num9 = 75, num10 = 50;
document.write("GCD of " + num9 + " and " + num10 + " is " + calculateGCD(num9, num10) + "<br>");

Выход:

 GCD of 34 and 22 is 2
GCD of 10 and 2 is 2
GCD of 88 and 11 is 11
GCD of 40 and 32 is 8
GCD of 75 and 50 is 25

Как найти НОК двух чисел

Наименьшее общее кратное (НОК) двух чисел – это наименьшее положительное целое число, которое полностью делится на два заданных числа. Вы можете найти НОК двух чисел, используя следующую математическую формулу:

 num1 * num2 = LCM(num1, num2) * GCD(num1, num2)
LCM(num1, num2) = (num1 * num2) / GCD(num1, num2)

Чтобы найти НОК двух чисел программным способом, вам нужно использовать функцию, чтобы найти НОД двух чисел.

Программа на C ++ для поиска НОК двух чисел

Ниже приведена программа на C ++ для поиска НОК двух чисел:

 // C++ program to find LCM of 2 numbers
#include <iostream>
using namespace std;
// Recursive function to find LCM of 2 numbers
int calculateGCD(int num1, int num2)
{
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
int calculateLCM(int num1, int num2)
{
return (num1 / calculateGCD(num1, num2)) * num2;
}
// Driver Code
int main()
{
int num1 = 34, num2 = 22;
cout << "LCM of " << num1 << " and " << num2 << " is " << calculateLCM(num1, num2) << endl;
int num3 = 10, num4 = 2;
cout << "LCM of " << num3 << " and " << num4 << " is " << calculateLCM(num3, num4) << endl;
int num5 = 88, num6 = 11;
cout << "LCM of " << num5 << " and " << num6 << " is " << calculateLCM(num5, num6) << endl;
int num7 = 40, num8 = 32;
cout << "LCM of " << num7 << " and " << num8 << " is " << calculateLCM(num7, num8) << endl;
int num9 = 75, num10 = 50;
cout << "LCM of " << num9 << " and " << num10 << " is " << calculateLCM(num9, num10) << endl;
return 0;
}

Выход:

 LCM of 34 and 22 is 374
LCM of 10 and 2 is 10
LCM of 88 and 11 is 88
LCM of 40 and 32 is 160
LCM of 75 and 50 is 150

Программа Python для поиска НОК двух чисел

Ниже приведена программа Python для поиска НОК двух чисел:

 # Python program to find LCM of 2 numbers
def calculateGCD(num1, num2):
if num2==0:
return num1
else:
return calculateGCD(num2, num1%num2)
def calculateLCM(num1, num2):
return (num1 // calculateGCD(num1, num2)) * num2
# Driver Code
num1 = 34
num2 = 22
print("LCM of", num1, "and", num2, "is", calculateLCM(num1, num2))
num3 = 10
num4 = 2
print("LCM of", num3, "and", num4, "is", calculateLCM(num3, num4))
num5 = 88
num6 = 11
print("LCM of", num5, "and", num6, "is", calculateLCM(num5, num6))
num7 = 40
num8 = 32
print("LCM of", num7, "and", num8, "is", calculateLCM(num7, num8))
num9 = 75
num10 = 50
print("LCM of", num9, "and", num10, "is", calculateLCM(num9, num10))

Выход:

 LCM of 34 and 22 is 374
LCM of 10 and 2 is 10
LCM of 88 and 11 is 88
LCM of 40 and 32 is 160
LCM of 75 and 50 is 150

Программа на C для поиска НОК двух чисел

Ниже приведена программа на языке C для поиска НОК двух чисел:

 // C program to find LCM of 2 numbers
#include <stdio.h>
// Recursive function to find LCM of 2 numbers
int calculateGCD(int num1, int num2)
{
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
int calculateLCM(int num1, int num2)
{
return (num1 / calculateGCD(num1, num2)) * num2;
}
// Driver Code
int main()
{
int num1 = 34, num2 = 22;
printf("LCM of %d and %d is %d ⁠n" , num1 , num2, calculateLCM(num1, num2));
int num3 = 10, num4 = 2;
printf("LCM of %d and %d is %d ⁠n" , num3 , num4, calculateLCM(num3, num4));

int num5 = 88, num6 = 11;
printf("LCM of %d and %d is %d ⁠n" , num5 , num6, calculateLCM(num5, num6));
int num7 = 40, num8 = 32;
printf("LCM of %d and %d is %d ⁠n" , num7 , num8, calculateLCM(num7, num8));
int num9 = 75, num10 = 50;
printf("LCM of %d and %d is %d ⁠n" , num9 , num10 , calculateLCM(num9, num10));
return 0;
}

Выход:

 LCM of 34 and 22 is 374
LCM of 10 and 2 is 10
LCM of 88 and 11 is 88
LCM of 40 and 32 is 160
LCM of 75 and 50 is 150

Программа на JavaScript для поиска НОК двух чисел

Ниже приведена программа на JavaScript для поиска НОК двух чисел:

 // JavaScript program to find LCM of 2 numbers
// Recursive function to find LCM of 2 numbers
function calculateGCD(num1, num2) {
if(num2==0)
{
return num1;
}
else
{
return calculateGCD(num2, num1%num2);
}
}
function calculateLCM(num1, num2)
{
return (num1 / calculateGCD(num1, num2)) * num2;
}
// Driver Code
var num1 = 34, num2 = 22;
document.write("LCM of " + num1 + " and " + num2 + " is " + calculateLCM(num1, num2) + "<br>");
var num3 = 10, num4 = 2;
document.write("LCM of " + num3 + " and " + num4 + " is " + calculateLCM(num3, num4) + "<br>");
var num5 = 88, num6 = 11;
document.write("LCM of " + num5 + " and " + num6 + " is " + calculateLCM(num5, num6) + "<br>");
var num7 = 40, num8 = 32;
document.write("LCM of " + num7 + " and " + num8 + " is " + calculateLCM(num7, num8) + "<br>");
var num9 = 75, num10 = 50;
document.write("LCM of " + num9 + " and " + num10 + " is " + calculateLCM(num9, num10) + "<br>");

Выход:

 LCM of 34 and 22 is 374
LCM of 10 and 2 is 10
LCM of 88 and 11 is 88
LCM of 40 and 32 is 160
LCM of 75 and 50 is 150

Узнать больше о математических алгоритмах

Математические алгоритмы играют жизненно важную роль в программировании. Целесообразно знать о некоторых основных программах, основанных на математических алгоритмах, таких как ситовые алгоритмы, простое факторизация, делители, числа Фибоначчи, вычисления nCr и т. Д.

В настоящее время функциональное программирование находится на вершине тенденций программирования в Интернете. Парадигма функционального программирования рассматривает вычисления как математические функции, и эта концепция очень полезна в программировании. Вы должны знать о функциональном программировании и о том, какие языки программирования поддерживают его, чтобы стать наиболее эффективным программистом.

Вадим Тукаев

305 / 286 / 116

Регистрация: 23.01.2018

Сообщений: 933

03.06.2020, 09:28

6

Цитата
Сообщение от Catstail
Посмотреть сообщение

а это программа или вызов библиотечной функции?

Одна из особенностей подхода APL, точнее особенность мышления его создателей – это максимальная абстрактность, высокоуровневость, многофункциональность. Это позволяет выразить небольшим количеством функций очень много. Маленький пример. Возьмём три разные задачи: декодировать IP-адрес, перевести число в другую систему счисления, перевести количество секунд в часы, минуты, секунды. Обычный программист (как “обычный порошок” в рекламе) сделает три отдельные функции. Но если присмотреться, это одна и та же задача! Более того, такой оператор в APL уже встроен.

Код

      256 256 256 256⊤2130706433
127 0 0 1
      2 2 2 2⊤10
1 0 1 0
      24 60 60⊤10000
2 46 40

Так вот, в той программе из трёх символов “квадратик” – это ввод данных. А вот крышечка между ними – это же обычная конъюнкция! Точнее, это наибольшее общее кратное, но если применять его к числам 0 и 1, то получится конъюнкция. А дизъюнкция, соответственно – это частный случай наименьшего общего множителя для чисел 0 и 1. Так что, отвечая на Ваш вопрос, это не вызов библиотечной функции, это стандартный оператор этого языка. По-моему, это невероятно красиво!

Код

      0∨0
0
      0∨1
1
      1∨0
1
      1∨1
1
      25∨60
5

Кстати, в Python всё очень похоже.

Python
1
2
3
4
from math import gcd
 
for a, b in (0, 0), (0, 1), (1, 0), (1, 1), (25, 60):
    print("{}v{} = {}".format(a, b, gcd(a, b)))



1



Наименьшее общее кратное

Написать функцию, которая вычисляет наименьшее общее кратное (НОК) пары чисел по формуле

НОК = ab / НОД(a, b),

где a и b – это натуральные числа, НОД – наибольший общий делитель.

Решение задачи на языке программирования Python

Из условия задачи ясно, чтобы найти НОК, надо сначала найти НОД. Последний можно вычислить, постепенно находя остаток от деления большего числа из пары на меньшее и присваивая остаток переменной, связанной с большим числом (см. алгоритм Евклида). В какой-то момент значение одной из переменных станет равным 0. Когда это произойдет, другая будет содержать НОД. Если неизвестно, какая именно переменная содержит НОД, то можно просто сложить значения обоих переменных.

В коде ниже используется функция для нахождения НОК, которая принимает два числа и возвращает найденное наименьшее общее кратное.

В основной ветке программы функция вызывается в цикле, который завершается, если то, что было введено, нельзя преобразовать к целому. В этом случае генерируется исключение и поток выполнения переходит к ветке except.

def lcm(a, b):
    m = a * b
    while a != 0 and b != 0:
        if a > b:
            a %= b
        else:
            b %= a
    return m // (a + b)
 
 
while 1:
    try:
        x = int(input('a = '))
        y = int(input('b = '))
        print('НОК:', lcm(x, y))
    except ValueError:
        break

Пример выполнения:

a = 14
b = 18
НОК: 126
a = 105
b = 305
НОК: 6405
a = stop

В модуле math языка программирования Python есть функция для нахождения наибольшего общего делителя (gcd – greatest common devisor). При ее использовании наша функция вычисления наименьшего общего кратного lcm (least common multiple) упрощается.

def lcm(a, b):
    import math
    return (a * b) // math.gcd(a, b)

Больше задач в PDF

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

Но прежде чем мы начнем, давайте разберем, что обозначает Least Common Multiple (LCM) — наименьшее общее кратное.

НОК: наименьшее общее кратное

Это понятие арифметики и системы счисления. НОК двух целых чисел a и b обозначается НОК(a,b). Это наименьшее натуральное число, которое делится и на «а», и на «b».

Например: у нас есть два целых числа 4 и 6. Найдем НОК:

  • Кратные 4:
 
4, 8, 12, 16, 20, 24, 28, 32, 36,... and so on... 
  • Кратные 6:
 
6, 12, 18, 24, 30, 36, 42,... and so on.... 

Общие кратные 4 и 6 — это просто числа, которые есть в обоих списках:

 
12, 24, 36, 48, 60, 72,.... and so on.... 

НОК — это наименьший общий множитель, поэтому он равен 12.

Поскольку мы поняли основную концепцию НОК, давайте рассмотрим следующую программу для нахождения НОК заданных целых чисел.

Пример:

 
# defining a function to calculate LCM 
def calculate_lcm(x, y): 
    # selecting the greater number 
    if x > y: 
        greater = x 
    else: 
        greater = y 
    while(True): 
        if((greater % x == 0) and(greater % y == 0)): 
            lcm = greater 
            break 
        greater += 1 
    return lcm   
 
# taking input from users 
num1 = int(input("Enter first number: ")) 
num2 = int(input("Enter second number: ")) 
# printing the result for the users 
print("The L.C.M. of", num1,"and", num2,"is", calculate_lcm(num1, num2)) 

Выход:

Enter first number: 3 
Enter second number: 4 
The L.C.M. of 3 and 4 is 12 

Объяснение:

Эта программа сохраняет два числа в num1 и num2 соответственно. Эти числа передаются в функцию calculate_lcm(). Функция возвращает НОК двух чисел.

Внутри функции мы сначала определили большее из двух чисел, поскольку наименьшее общее кратное может быть больше или равно наибольшему числу. Затем мы используем бесконечный цикл while, чтобы перейти от этого числа и дальше.

На каждой итерации мы проверяли, идеально ли делят оба числа число. Если это так, мы сохранили число как НОК и вышли из цикла. В противном случае число увеличивается на 1, и цикл продолжается.

НОД: наибольший общий делитель

В этом разделе мы разберем, как найти Highest Common Factor (HCF) — наибольший общий делитель (НОД) в языке программирования Python.

Наибольший общий делитель двух или более целых чисел, когда хотя бы одно из них не равно нулю, является наибольшим положительным целым числом, которое без остатка делит целые числа. Например, НОД 8 и 12 равен 4.

Например:

У нас есть два целых числа 8 и 12. Найдем наибольший общий делитель.

  • Делители числа 8:
 
1, 2, 4, 8 
  • Делители числа 12:
 
1, 2, 3, 4, 6, 12 

НОД 8 и 12 равны 4.

Теперь давайте рассмотрим пример, основанный на нахождении НОД двух заданных чисел.

Пример:

 
# defining a function to calculate HCF 
def calculate_hcf(x, y): 
    # selecting the smaller number 
    if x > y: 
        smaller = y 
    else: 
        smaller = x 
    for i in range(1,smaller + 1): 
        if((x % i == 0) and(y % i == 0)): 
            hcf = i 
    return hcf 
 
# taking input from users 
num1 = int(input("Enter first number: ")) 
num2 = int(input("Enter second number: ")) 
# printing the result for the users 
print("The H.C.F. of", num1,"and", num2,"is", calculate_hcf(num1, num2)) 

Выход:

Enter first number: 8 
Enter second number: 12 
The H.C.F. of 8 and 12 is 4 

Объяснение:

В приведенном выше фрагменте кода два целых числа, хранящиеся в переменных num1 и num2, передаются в функцию calculate_hcf(). Функция вычисляет НОД для этих двух чисел и возвращает его.

Внутри функции мы должны определить меньшее число, поскольку НОД может быть меньше или равен наименьшему числу. Затем мы использовали цикл for, чтобы перейти от 1 к этому числу.

На каждой итерации мы должны проверять, точно ли число делит оба входных числа. Если это так, мы должны сохранить число как НОД. По завершении цикла мы получаем наибольшее число, которое идеально делит оба числа.

1196-1017cookie-checkНахождение НОК и НОД в Python — примеры

Наименьшее общее кратное

 

Наименьшее общее кратное (НОК) двух целых чисел m и n есть наименьшее натуральное число, которое делится на m и n без остатка.
Зная наибольший общий делитель (НОД) двух целых чисел m и n, их наименьшее общее кратное можно вычислить по такой формуле:

НОК = m * n / НОД (m, n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#include <iostream>
using namespace std;
// Наибольший общий делитель
int NOD(int n1, int n2)
{
  int div;
  if (n1 == n2)  return n1;
  int d = n1 – n2;
  if (d < 0) {
    d = -d;  div = NOD(n1, d);
  } else
    div = NOD(n2, d); 
  return div;
}
// Наименьшее общее кратное
int NOK(int n1, int n2) 

  return n1*n2 / NOD(n1, n2); 
}
int main() 
{
  int n1, n2;
  cout << “n1=”;
  cin >> n1;
  cout << “n2=”;
  cin >> n2;
  cout << NOK(n1, n2);
  cin.get(); cin.get();
  return 0;
}

Результат выполнения
Наименьшее общее кратное: результат выполнения

Назад: Алгоритмизация

Добавить комментарий