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

Алгоритмы вычисления наименьшего общего кратного (НОК) и наибольшего общего делителя (НОД) описаны в одной теме, т.к. для эффективного вычисления НОК нужно вычислить НОД.

1 Алгоритм расчета наибольшего общего делителя

Даны два целых числа A и B, их наибольший общий делитель — такое число C, что на него делится без остатка и A, и B

В школе нас учили искать НОД разложением на простые множители, однако такая задача крайне тяжело решается на компьютере, зато мы можем заставить его перебрать все числа от min(a, b) до единицы и проверить условие делимости, однако и это не самый эффективный способ.

Люди, интересующиеся алгоритмами, сразу вспомнять алгоритм Евклида, однако, на мой взгляд, нет смысла зубрить алгоритмы — наиболее ценно их понимание и способность разработать нечто аналогичное. Для этого я предлагаю пытаться визуализировать задачу.

Целое число — это количество чего-либо неделимого. На следующей картинке два числа показаны в виде прямоугольников, под значением числа можно понимать количество «блоков в прямоугольнике». Показано схематично (я не пытался рисовать точно).

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

Эффективный алгоритм расчета НОД строится на следующих наблюдениях (постарайтесь их «почувствовать»):

  1. если A делится на B без остатка — то НОД(A, B) = B;
  2. любое число, которое делит оба числа A и B, делит также и A-B, поэтому
    НОД(A, B) <= НОД (A — B, B);. То есть уменьшение числа A на значение B не повлияет на результат вычисления НОД;
  3. мы можем воспользоваться предыдущим пунктом несколько (t) раз — если A = B*t + r для целых чисел t и r — то НОД(A, B) = НОД(r, B).

Из второго пункта следует идея следующего алгоритма поиска НОД: Отнимать от большего меньшее, пока числа не станут равны. Полученное число и является наибольшим общим делителем. Такой алгоритм будет работать значительно быстрее чем полный перебор, но и его можно улучшить — посмотрим визуализацию (исходное состояние показано выше):

В какой-то момент числа окажутся равны и мы получим результат. Этот момент обязательно настанет — в крайнем случае когда оба числа станут равны единице (потому что это ей кратны любые целые числа).

Из последней иллюстрации видно, что многократное вычитание можно заменить на получение остатка от деления (об этом же говорит третье «наблюдение»). Тогда алгоритм можно записать на псевдокоде следующим образом:

наибольший_общий_делитель(a, b) {
  если a делится на b без остатка то - верни b;
  если b делится на a без остатка то - верни a;
  
  если a > b - то верни наибольший_общий_делитель(a mod b, b);
  иначе верни наибольший_общий_делитель(a, b mod a);
}

Тут mod — операция получения остатка от деления.

2 Алгоритм расчета наименьшего общего кратного

Наименьшее общее кратное двух целых чисел A и B есть наименьшее натуральное число, которое делится на A и B без остатка.

Чтобы лучше понять о чем речь — предлагаю такую геометрическую интерпретацию: значения A и B задают длины отрезков. НОК — это длина другого отрезка, который можно составить как из целого количества отрезков A, так и отрезков B:

Для любых чисел мы можем найти общее кратное C = A*B, однако, оно не всегда будет наименьшим. Примитивный алгоритм вычисления НОК мог бы заключаться в переборе всех чисел от max(A, B) до A*B. Однако, это не самое эффективное решение. На самом деле, если длина отрезка A = 4, а B = 3, то перебирать надо все отрезки, кратные 4, т.е. max(A, B).

Обратите снимание, что если A и B взаимнопростые (иными словами НОД(A, B) = 1) — то НОК(A, B) = A*B. Если же у этих чисел есть делители d0, d1, ..., dn, то их общими кратными будут числа: (A*B)/d0, (A*B)/d1, … (A*B)/dn. Значит, чтобы найти наименьшее общее кратное, нужно найти наибольший из делителей:

наименьшее_общее_кратное(a, b) {
  верни (A*B)/наибольший_общий_делитель(a, b);
}

Из float A, которое может принимать любое значение, нужно получить число, кратное 2n.
Например, если A = 345.53;, то результат должен быть равен 256.

Пока что в голову ничего, кроме использования условного оператора, не приходит, но это не совсем подходит, но думаю, есть вариант экономнее, так как выполняется это при рендеринге, что и не должно влиять на fps.

Harry's user avatar

Harry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

задан 23 окт 2014 в 18:36

Ni55aN's user avatar

Степень двойки:

(long) (log(A)/log(2));

Ну и для малых степеней используем сдвиг, да.
Просто «float A» должно натолкнуть на мысль, что FLT_MAX ≈ 3.4E+38…

ответ дан 24 окт 2014 в 0:30

Yura Ivanov's user avatar

Yura IvanovYura Ivanov

26.4k2 золотых знака30 серебряных знаков57 бронзовых знаков

8

Как верно подметил товарищ Etki, есть битовая операция…

  1. Приводим float к int (отбрасываем
    всё, что после запятой).
  2. Побитово проходим слева направо (с
    первого или второго бита в
    зависимости от unsigned или signed)
    и ищем первый бит с единицей.
  3. После этого бита зануляем все
    оставшиеся биты, но если это был
    последний бит, то "число"==1 (что с ним делать, вам виднее).

<del> в данном случае нужен не «цикл», а набор констант и if’ов. </del> можно сделать и циклом:

  1. Делаем массив из Х элементов
    (степени двоек, Х равен количеству
    битов у переменной).
  2. Сдвигаем вправо и увеличиваем
    счётчик.
  3. Результат равен нулю? Если да, то в
    счётчике хранится положение
    последней единицы (если считать
    справа налево), иначе повторяем
    цикл.
  4. Берём результат из массива по
    массив[счётчик].

По скорости работы сложно сказать, но, вероятно, второй способ быстрее (если учесть, что компилятор оптимизирует), но всё равно лучше затестить.

Виталина's user avatar

Виталина

111 золотой знак2 серебряных знака8 бронзовых знаков

ответ дан 23 окт 2014 в 19:26

ProkletyiPirat's user avatar

ProkletyiPiratProkletyiPirat

3,3531 золотой знак13 серебряных знаков20 бронзовых знаков

6

Простое решение «в лоб» на C (для сравнения скорости):

#include <stdio.h>
#include <math.h>
int main() {
    volatile double A=345.53;
    volatile double r;
    for(int i=100000000; i--;) r= exp2(floor(log2(A)));
    printf("%fn", r);
}

volatile поставил чтобы было честное вычисление, а не результат спрогнозированный оптимизатором.
Проверил на 2х машинах:

  1. Celeron(R) Dual-Core CPU T3100 @ 1.90GHz
  2. Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz

Время счёта 17.812 и 9.288 секунд соответственно.

Быстрый переносимый вариант (только тело цикла):

int exp;
frexp(A, &exp);
r= ldexp(.5, exp);

Время счёта 6.240 и 1.768 секунды.

Вариант зависимый от представления в расчёте на то, что FLT_RADIX==2:

r= scalbln(1, ilogb(A));

Последний вариант у меня оказался на селероне немного медленнее — 7.488 секунд, а на коре немного быстрее — 1.204 секунды.

ответ дан 11 ноя 2015 в 21:53

sercxjo's user avatar

sercxjosercxjo

6,8842 золотых знака26 серебряных знаков55 бронзовых знаков

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

Наверняка есть крышесносящее битовое решение, но я пока не вижу четкой схемы решения в голове.

ответ дан 23 окт 2014 в 18:47

etki's user avatar

etkietki

36.1k2 золотых знака55 серебряных знаков81 бронзовый знак

2

function show_str4($str){    
    return sprintf("%b %b %b %b",ord($str[0]),ord($str[1]),ord($str[2]),ord($str[3]));
}    

function get_mask(){
    $c00=chr(0);    $cff=chr(255);
    $test = pack("f",5e-1); 
    $m = pack("f",25e-2);
    $mask = $c00.$c00.$c00.$cff | $m; if (($mask & $test) == $test) return $mask;
    $mask = $c00.$c00.$cff.$c00 | $m; if (($mask & $test) == $test) return $mask;
    $mask = $c00.$cff.$c00.$c00 | $m; if (($mask & $test) == $test) return $mask;
    $mask = $cff.$c00.$c00.$c00 | $m; if (($mask & $test) == $test) return $mask;
    exit(1);
}

function floattoexp2($x){
    $arr=unpack("f",pack("f",$x) & get_mask());
    return $arr[1];
}

$x = (float)345.67; 
$y=floattoexp2($x); 
$x_packed = pack("f",$x);
$mask = get_mask();
$y_packed = $x_packed & $mask;
printf("x=$x y=$y<br>x_packed=".show_str4($x_packed)."<br>mask=".show_str4($mask)."<br>y_packed=".show_str4($y_packed));    

Результаты:

x=345.67 y=256
x_packed=11000011 11010101 10101100 1000011
mask=0 0 10000000 11111111
y_packed=0 0 10000000 1000011

Суть алгоритма — в обработке внутреннего представления float-числа по маске.
Маска формируется так:
Положение байта с порядком имеет 4 варианта, проблема решена перебором.
При этом местоположение мантиссы определяется автоматически, с использованием константы 0.25.

Алгоритм не может быть рекомендован для кроссплатформенных приложений.

ответ дан 11 ноя 2015 в 15:42

Yuri Negometyanov's user avatar

2

В нормализованном внутреннем битовом представлении заданного числа обнулить все разряды мантиссы, кроме первого.
Если порядок пишется в допкоде, то для этого достаточно логически умножить внутреннее представление числа на внутреннее представление константы 0.5 или 0.25, в зависимости от способа представления числа.
Минус предложения — отсутствие универсальности.

ответ дан 9 ноя 2015 в 10:09

Yuri Negometyanov's user avatar

public class PositionInsertToList {
public static int searchPosition(long arr[], long key){
    int l = -1;
    int r = arr.length;
    while(l != r - 1){
        int mid = (l + r ) >> 1;
        if(key < arr[mid]) r = mid;
        else l = mid;
    }
    return r;
}

   public static void main(String[] args) {
        long a[] = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536};
        System.out.println(searchPosition(a, (long)345.53));
    }
}

Применяем бинарный поиск. Работает за log(a.length) — двоичный логарифм. Если в массиве 32 элемента, то поиск осуществляется за 6 действий. Получаем индекс, куда бы мы вставили наше число. В данном случае это число 8. Получается, что в этой позиции число больше нашего, а в позиции 7 число меньше нашего.

Виталина's user avatar

Виталина

111 золотой знак2 серебряных знака8 бронзовых знаков

ответ дан 23 окт 2014 в 21:02

myduomilia's user avatar

4


Download Article


Download Article

A multiple is the result of multiplying a number by an integer. The least common multiple (LCM) of a group of numbers is the smallest number that is a multiple of all the numbers. To find the least common multiple you need to be able to identify the factors of the numbers you are working with. You can use a few different methods to find the least common multiple. These methods also work when finding the LCM of more than two numbers.

  1. Image titled Find the Least Common Multiple of Two Numbers Step 1

    1

    Assess your numbers. This method works best when you are working with two numbers that are less than 10. If you are working with larger numbers, it’s best to use a different method.

    • For example, you might need to find the least common multiple of 5 and 8. Since these are small numbers, it is appropriate to use this method.
  2. Image titled Find the Least Common Multiple of Two Numbers Step 2

    2

    Write out the first several multiples of the first number. A multiple is a product of any number and an integer.[1]
    In other words, they are the numbers you would see in a multiplication table.

    • For example, the first several multiples of 5 are 5, 10, 15, 20, 25, 30, 35, and 40.

    Advertisement

  3. Image titled Find the Least Common Multiple of Two Numbers Step 3

    3

    Write out the first several multiples of the second number. Do this near the first set of multiples, so that they are easy to compare.

    • For example, the first several multiples of 8 are 8, 16, 24, 32, 40, 48, 56, and 64.
  4. Image titled Find the Least Common Multiple of Two Numbers Step 4

    4

    Find the smallest multiple the numbers have in common. You might need to extend your list of multiples until you find one both numbers share. This number will be your least common multiple.[2]

    • For example, the lowest multiple 5 and 8 share is 40, so the least common multiple of 5 and 8 is 40.
  5. Advertisement

  1. Image titled Find the Least Common Multiple of Two Numbers Step 5

    1

    Assess your numbers. This method works best when both of the numbers you are working with are greater than 10. If you have smaller numbers, you can use a different method to find the least common multiple more quickly.

    • For example, if you need to find the least common multiple of 20 and 84, you should use this method.
  2. Image titled Find the Least Common Multiple of Two Numbers Step 6

    2

    Factor the first number. You want to factor the number into its prime factors; that is, find the prime factors you can multiply together to get this number. One way to do this is by creating a factor tree. Once you are done factoring, rewrite the prime factors as an equation.[3]

  3. Image titled Find the Least Common Multiple of Two Numbers Step 7

    3

    Factor the second number. Do this in the same way you factored the first number, finding the prime factors you can multiply together to get the number.

  4. Image titled Find the Least Common Multiple of Two Numbers Step 8

    4

    Write down the factors each number shares. Write the factors as a multiplication sentence. As you write each factor, cross it off in each numbers factorization equation.[4]

  5. Image titled Find the Least Common Multiple of Two Numbers Step 9

    5

    Add any leftover factors to the multiplication sentence. These are the factors you did not cross out when comparing the two groups of factors. Thus, these are factors that the two numbers do not share.[5]

  6. Image titled Find the Least Common Multiple of Two Numbers Step 10

    6

    Calculate the least common multiple. To do this, multiply together all of the factors in your multiplication sentence.[6]

    • For example, 2times 2times 5times 7times 3=420. So, the least common multiple of 20 and 84 is 420.
  7. Advertisement

  1. Image titled Find the Least Common Multiple of Two Numbers Step 11

    1

    Draw a tic-tac-toe grid. A tic-tac-toe grid is two sets of parallel lines that intersect each other perpendicularly. The lines form three rows and three columns and looks like the pound key (#) on a phone or keyboard. Write your first number in the top-center square of the grid. Write your second number in the top-right square of the grid.[7]

    • For example, if you are trying to find the least common multiple of 18 and 30, write 18 in the top center of your grid, and 30 in the top right of your grid.
  2. Image titled Find the Least Common Multiple of Two Numbers Step 12

    2

    Look for a factor that is common to both numbers. Write this number in the top-left square of your grid. It is helpful to use prime factors, but you don’t necessarily have to.

    • For example, since 18 and 30 are both even numbers, you know that that they both have a factor of 2. So write 2 in the top-left of the grid.
  3. Image titled Find the Least Common Multiple of Two Numbers Step 13

    3

    Divide the factor into each number. Write the quotient in the square below either number. A quotient is the answer to a division problem.[8]

  4. Image titled Find the Least Common Multiple of Two Numbers Step 14

    4

    Find a factor that is common to the two quotients. If there is no factor common to both quotients, you can skip this and the next step. If there is a common factor, write it in the middle-left square of the grid.[9]

    • For example, 9 and 15 both have a factor of 3, so you would write 3 in the middle-left of the grid.
  5. Image titled Find the Least Common Multiple of Two Numbers Step 15

    5

    Divide this new factor into each quotient. Write this new quotient below the first ones.

  6. Image titled Find the Least Common Multiple of Two Numbers Step 16

    6

    Extend your grid if necessary. Follow this same process until you reach a point where the last set of quotients have no common factor.

  7. Image titled Find the Least Common Multiple of Two Numbers Step 17

    7

    Draw a circle around the numbers in the first column and last row of your grid. You can think of it as drawing an “L” for “least common multiple.” Write a multiplication sentence using all of these factors.[10]

    • For example, since 2 and 3 are in the first column of the grid, and 3 and 5 are in the last row of the grid, you would write the sentence 2times 3times 3times 5.
  8. Image titled Find the Least Common Multiple of Two Numbers Step 18

    8

    Complete the multiplication. When you multiply all of these factors together, the result is the least common multiple of your two original numbers.[11]

    • For example, 2times 3times 3times 5=90. So, the least common multiple of 18 and 30 is 90.
  9. Advertisement

  1. Image titled Find the Least Common Multiple of Two Numbers Step 19

    1

    Understand the vocabulary of division. The dividend is the number being divided. The divisor is the number the dividend is being divided by. The quotient is the answer to the division problem. The remainder is the amount left over after a number is divided by another.[12]

    • For example, in the equation 15div 6=2;{text{remainder}};3:
      15 is the dividend
      6 is the divisor
      2 is the quotient
      3 is the remainder.
  2. Image titled Find the Least Common Multiple of Two Numbers Step 20

    2

    Set up the formula for the quotient-remainder form. The formula is {text{dividend}}={text{divisor}}times {text{quotient}}+{text{remainder}}.[13]
    You will use this form to set up Euclid’s algorithm to find the greatest common divisor of two numbers.

    • For example, 15=6times 2+3.
    • The greatest common divisor is the largest divisor, or factor, that two numbers share.[14]
    • In this method, you first find the greatest common divisor, and then use it to find the least common multiple.
  3. Image titled Find the Least Common Multiple of Two Numbers Step 21

    3

    Use the larger of the two numbers as the dividend. Use the smaller of the two numbers as the divisor. Set up an equation in quotient-remainder form for these two numbers.

    • For example, if you are trying to find the least common multiple of 210 and 45, you would calculate 210=45times 4+30.
  4. Image titled Find the Least Common Multiple of Two Numbers Step 22

    4

    Use the original divisor as the new dividend. Use the remainder as the new divisor. Set up an equation in quotient-remainder form for these two numbers.

    • For example, {displaystyle 45=30times 1+15}.
  5. Image titled Find the Least Common Multiple of Two Numbers Step 23

    5

    Repeat this process until you have a remainder of 0. For each new equation, use the previous equation’s divisor as the new dividend, and the previous remainder as the new divisor.[15]

    • For example, 30=15times 2+0. Since the remainder is 0, you do not need to divide any further.
  6. Image titled Find the Least Common Multiple of Two Numbers Step 24

    6

    Look at the last divisor you used. This is the greatest common divisor for the two numbers.[16]

    • For example, since the last equation was 30=15times 2+0, the last divisor was 15, and so 15 is the greatest common divisor of 210 and 45.
  7. Image titled Find the Least Common Multiple of Two Numbers Step 25

    7

    Multiply the two numbers. Divide the product by the greatest common divisor. This will give you the least common multiple of the two numbers.[17]

  8. Advertisement

Add New Question

  • Question

    What’s the formula of the least common multiple?

    wikiHow Staff Editor

    This answer was written by one of our trained team of researchers who validated it for accuracy and comprehensiveness.

    wikiHow Staff Editor

    wikiHow Staff Editor

    Staff Answer

    The formula is lcm(a, b) = a × b / gcd(a, b), where a and b are the numbers for which you want to find the LCM, and GCD is the greatest common divisor.

  • Question

    Is there a least common multiple calculator?

    wikiHow Staff Editor

    This answer was written by one of our trained team of researchers who validated it for accuracy and comprehensiveness.

    wikiHow Staff Editor

    wikiHow Staff Editor

    Staff Answer

    Yes, there are multiple LCM calculators online. Try websites like CalculatorSoup.com or Calculator.net to find calculators for finding the LCM and doing a variety of other common calculations.

  • Question

    What’s the fastest way to find the least common multiple of two numbers?

    wikiHow Staff Editor

    This answer was written by one of our trained team of researchers who validated it for accuracy and comprehensiveness.

    wikiHow Staff Editor

    wikiHow Staff Editor

    Staff Answer

    One quick and easy way to do it is to start by finding the greatest common factor (GCF) of the 2 numbers. Divide the GCF into either one of the 2 numbers, then multiply the result by the other number. This will give you the LCM.

See more answers

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

  • If you need to find the LCM of more than two numbers, the above methods can be tweaked. For instance, to find the LCM of 16, 20, and 32, you could start by finding the LCM of 16 and 20 (which is 80), and then find the LCM of 80 and 32, which turns out to be 160.

  • The LCM has many uses. The most common is that, whenever you add or subtract fractions, they must have the same denominator; if they do not, you need to convert each fraction to some equivalent fraction so they will share the same denominator. The best way to do that is to find the lowest common denominator (LCD) — which is just the LCM of the denominators.

Thanks for submitting a tip for review!

Advertisement

References

About This Article

Article SummaryX

To find the least common multiples of two numbers, start by writing out the first several multiples for each number. For example, the first several multiples of 5 would be 5, 10, 15, 20, 25, 30, 35, and 40. Once you’ve written out the first several multiples for both numbers, find the smallest multiple that they have in common, which is the least common multiple. If they don’t have a common multiple, keep listing the multiples for each number until you find one. If you want to know how to use prime factorization or an algorithm to find the least common multiple, keep reading the article!

Did this summary help you?

Thanks to all authors for creating a page that has been read 1,235,502 times.

Did this article help you?


Загрузить PDF


Загрузить PDF

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

  1. Изображение с названием Find the Least Common Multiple of Two Numbers Step 1

    1

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

    • Например, найдите наименьшее общее кратное чисел 5 и 8. Это небольшие числа, поэтому можно использовать данный метод.
  2. Изображение с названием Find the Least Common Multiple of Two Numbers Step 2

    2

    Запишите ряд чисел, которые кратны первому числу. Кратное число – это число, которое делится на данное число без остатка.[1]
    Кратные числа можно посмотреть в таблице умножения..

    • Например, числами, которые кратны 5, являются: 5, 10, 15, 20, 25, 30, 35, 40.
  3. Изображение с названием Find the Least Common Multiple of Two Numbers Step 3

    3

    Запишите ряд чисел, которые кратны первому числу. Сделайте это под кратными числами первого числа, чтобы сравнить два ряда чисел.

    • Например, числами, которые кратны 8, являются: 8, 16, 24, 32, 40, 48, 56, и 64.
  4. Изображение с названием Find the Least Common Multiple of Two Numbers Step 4

    4

    Найдите наименьшее число, которое присутствует в обоих рядах кратных чисел. Возможно, вам придется написать длинные ряды кратных чисел, чтобы найти общее число. Наименьшее число, которое присутствует в обоих рядах кратных чисел, является наименьшим общим кратным.[2]

    • Например, наименьшим числом, которое присутствует в рядах кратных чисел 5 и 8, является число 40. Поэтому 40 – это наименьшее общее кратное чисел 5 и 8.

    Реклама

  1. Изображение с названием Find the Least Common Multiple of Two Numbers Step 5

    1

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

    • Например, найдите наименьшее общее кратное чисел 20 и 84. Каждое из чисел больше 10, поэтому можно использовать данный метод.
  2. Изображение с названием Find the Least Common Multiple of Two Numbers Step 6

    2

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

  3. Изображение с названием Find the Least Common Multiple of Two Numbers Step 7

    3

    Разложите на простые множители второе число. Сделайте это так же, как вы раскладывали на множители первое число, то есть найдите такие простые числа, при перемножении которых получится данное число.

  4. Изображение с названием Find the Least Common Multiple of Two Numbers Step 8

    4

    Запишите множители, общие для обоих чисел. Запишите такие множители в виде операции умножения. По мере записи каждого множителя зачеркивайте его в обоих выражениях (выражения, которые описывают разложения чисел на простые множители).

  5. Изображение с названием Find the Least Common Multiple of Two Numbers Step 9

    5

    К операции умножения добавьте оставшиеся множители. Это множители, которые не зачеркнуты в обоих выражениях, то есть множители, не являющиеся общими для обоих чисел.[3]

  6. Изображение с названием Find the Least Common Multiple of Two Numbers Step 10

    6

    Вычислите наименьшее общее кратное. Для этого перемножьте числа в записанной операции умножения.

    • Например, 2times 2times 5times 7times 3=420. Таким образом, наименьшее общее кратное 20 и 84 равно 420.

    Реклама

  1. Изображение с названием Find the Least Common Multiple of Two Numbers Step 11

    1

    Нарисуйте сетку как для игры в крестики-нолики. Такая сетка представляет собой две параллельные прямые, которые пересекаются (под прямым углом) с другими двумя параллельными прямыми. Таким образом, получатся три строки и три столбца (сетка очень похожа на значок #). Первое число напишите в первой строке и втором столбце. Второе число напишите в первой строке и третьем столбце.[4]

    • Например, найдите наименьшее общее кратное чисел 18 и 30. Число 18 напишите в первой строке и втором столбце, а число 30 напишите в первой строке и третьем столбце.
  2. Изображение с названием Find the Least Common Multiple of Two Numbers Step 12

    2

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

    • Например, 18 и 30 – это четные числа, поэтому их общим делителем будет число 2. Таким образом, напишите 2 в первой строке и первом столбце.
  3. Изображение с названием Find the Least Common Multiple of Two Numbers Step 13

    3

    Разделите каждое число на первый делитель. Каждое частное запишите под соответствующим числом. Частное – это результат деления двух чисел.

  4. Изображение с названием Find the Least Common Multiple of Two Numbers Step 14

    4

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

    • Например, 9 и 15 делятся на 3, поэтому запишите 3 во второй строке и первом столбце.
  5. Изображение с названием Find the Least Common Multiple of Two Numbers Step 15

    5

    Разделите каждое частное на второй делитель. Каждый результат деления запишите под соответствующим частным.

  6. Изображение с названием Find the Least Common Multiple of Two Numbers Step 16

    6

    Если нужно, дополните сетку дополнительными ячейками. Повторяйте описанные действия до тех пор, пока у частных не будет общего делителя.

  7. Изображение с названием Find the Least Common Multiple of Two Numbers Step 17

    7

    Обведите кружками числа в первом столбце и последней строке сетки. Затем выделенные числа запишите в виде операции умножения.[5]

    • Например, числа 2 и 3 находятся в первом столбце, а числа 3 и 5 находятся в последней строке, поэтому операцию умножения запишите так: 2times 3times 3times 5.
  8. Изображение с названием Find the Least Common Multiple of Two Numbers Step 18

    8

    Найдите результат умножения чисел. Так вы вычислите наименьшее общее кратное двух данных чисел.[6]

    • Например, 2times 3times 3times 5=90. Таким образом, наименьшее общее кратное 18 и 30 равно 90.

    Реклама

  1. Изображение с названием Find the Least Common Multiple of Two Numbers Step 19

    1

    Запомните терминологию, связанную с операцией деления. Делимое – это число, которое делят. Делитель – это число, на которое делят. Частное – это результат деления двух чисел. Остаток – это число, оставшееся при делении двух чисел.[7]

    • Например, в выражении 15div 6=2 ост. 3:
      15 – это делимое
      6 – это делитель
      2 – это частное
      3 – это остаток.
  2. Изображение с названием Find the Least Common Multiple of Two Numbers Step 20

    2

    Запишите выражение, которое описывает операцию деления с остатком. Выражение: {text{делимое}}={text{делитель}}times {text{частное}}+{text{остаток}}.[8]
    Это выражение будет использовано, чтобы записать алгоритм Евклида и найти наибольший общий делитель двух чисел.

    • Например, 15=6times 2+3.
    • Наибольший общий делитель (НОД) – это наибольшее число, на которое делятся все данные числа.[9]
    • В этом методе сначала нужно найти наибольший общий делитель, а затем вычислить наименьшее общее кратное.
  3. Изображение с названием Find the Least Common Multiple of Two Numbers Step 21

    3

    Большее из двух чисел рассматривайте в качестве делимого. Меньшее из двух чисел считайте делителем. Для этих чисел запишите выражение, которое описывает операцию деления с остатком.

    • Например, найдите наименьшее общее кратное чисел 210 и 45. Запишите такое выражение: 210=45times 4+30.
  4. Изображение с названием Find the Least Common Multiple of Two Numbers Step 22

    4

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

    • Например, 45=30times 2+15.
  5. Изображение с названием Find the Least Common Multiple of Two Numbers Step 23

    5

    Повторяйте описанные действия до тех пор, пока остаток не будет равен 0. Предыдущий делитель используйте в качестве нового делимого, а предыдущий остаток – как новый делитель; для этих чисел записывайте соответствующее выражение.[10]

    • Например, 30=15times 2+0. Так как остаток равен 0, дальше делить нельзя.
  6. Изображение с названием Find the Least Common Multiple of Two Numbers Step 24

    6

    Посмотрите на последний делитель. Это наибольший общий делитель двух чисел.[11]

    • Например, последним выражением было 30=15times 2+0, поэтому последний делитель – это число 15. Таким образом, 15 – это наибольший общий делитель чисел 210 и 45.
  7. 7

    Перемножьте два числа. Затем разделите произведение на наибольший общий делитель. Так вы вычислите наименьшее общее кратное двух чисел.[12]
    [[[Image:Find the Least Common Multiple of Two Numbers Step 25.jpg|center]]

    Реклама

Советы

  • Если нужно найти НОК трех и более чисел, упросите себе задачу. Например, чтобы вычислить НОК чисел 16, 20 и 32, сначала найдите наименьшее общее кратное чисел 16 и 20 (оно равно 80), а потом найдите НОК чисел 80 и 32, которое равно 160.
  • НОК имеет множество применений. Например, чтобы сложить или вычесть дроби, они должны иметь одинаковый знаменатель. Если у дробей разные знаменатели, нужно преобразовать дроби так, чтобы привести их к общему знаменателю. А это проще сделать, если найти наименьший общий знаменатель, который равен наименьшему общему кратному чисел, которые находятся в знаменателях дробей.

Реклама

Об этой статье

Эту страницу просматривали 69 224 раза.

Была ли эта статья полезной?

Наибольший общий делитель

Как несложно догадаться, наибольший общий делитель (англ. greatest
common divisor) двух целых чисел — наибольшее число, на которое делится
каждое из них. Например:

[gcd(15, 20) = 5]

[gcd(12, 30) = 6]

Сразу заметим важное свойство:

[gcd(a, b) = gcd(b, a)]

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

Алгоритм Евклида

Алгоритм Евклида — один из первых алгоритмов в истории, использовался
ещё в Древней Греции, и дошёл до наших дней. В изначальном виде он назывался
“взаимным вычитанием”, так как заключался в поочерёдном вычитании меньшего
числа из большего, пока одно из них не станет равным 0. Сегодня чаще всего
вместо вычитания используется взятие остатка от деления, но суть алгоритма
сохранилась.

Алгоритм заключается в построении ряда чисел следующего вида ((a > b)):

[a, b, r_1, r_2, ldots, r_n]

Где каждое последующее число является остатком от деления предпредыдущего
на предыдущее:

[r_1 = a bmod b \
r_2 = b bmod r_1 \
ldots \
r_n = r_{n — 2} bmod r_{n — 1}]

Ряд заканчивается, когда остаток от деления предпоследнего числа на
последнее становится равным 0:

[r_{n — 1} bmod r_n = 0]

В таком случае утверждается, что:

[gcd(a, b) = r_n]

Для доказательства этого утверждения сначала докажем следующее:
наборы общих делителей пары ((a, b)) и пары ((b, r_1)) полностью совпадают.
Рассмотрим произвольный (не обязательно наибольший) общий делитель (a) и (b):

(t) — общий делитель (a) и (b).

(r_1 = a bmod b), или (a = bq + r_1).

Докажем, что (t) также является общим делителем (b) и (r_1).

(b) делится на (t) по определению.

(r_1 = a — bq = t * ({a over t} — {b over t} * q)), где ({a over t}) и ({b over t}) целые по определению.

Значит, (r_1) также делится на (t), что и требовалось доказать.

Из того, что все общие делители пар ((a, b)) и ((b, r_1)) совпадают,
в частности следует, что (gcd(a, b) = gcd(b, r_1)).

Далее по индукции можно доказать следующее:

[gcd(a, b) = gcd(b, r_1) = gcd(r_1, r_2) = ldots = gcd(r_{n — 1}, r_n) = gcd(r_n, 0)]

(Нуль в последнем выражении появился из условия (r_{n — 1} bmod r_n = 0)).

Нуль делится на все числа, отличные от нуля, поэтому справедливо следующее
свойство:

[gcd(x, 0) = x, для любого x in mathbb{N}.]

Следовательно,

[gcd(a, b) = r_n,]

что и требовалось доказать.

Варианты реализации алгоритма Евклида на C++

Существует несколько вариантов реализации алгоритма Евклида, как итеративных
так и рекурсивных. Классическая итеративная реализация (работающая быстрее всех
рекурсивных) выглядит так:

1
2
3
4
5
6
7
8
9
10
11
12
int gcd(int a, int b) {
    if (a < b) {
        swap(a, b);
    }

    while (b) {
        a %= b;
        swap(a, b);
    }

    return a;
}

Рекурсивно это же можно реализовать так:

1
2
3
4
5
6
7
8
9
10
11
int gcd(int a, int b) {
    if (a < b) {
        swap(a, b);
    }

    if (b) {
        return gcd(b, a % b);
    } else {
        return a;
    }
}

Преимущество рекурсивной реализации заключается в возможности записать её в
очень кратком виде (предполагающим, что (a > b)):

1
2
3
int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}

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

Время работы алгоритма Евклида

Согласно некоторым исследованиям, время работы алгоритма Евклида тесно
связано с числами Фибоначчи. Это выражается, в частности, в том, что два
последовательных числа Фибоначчи — наихудшие входные данные для алгоритма
Евклида. При (a = F_n, b = F_{n — 1}), алгоритм Евклида совершит ровно
(n — 2) итерации. Отсюда можно выразить асимптотическую сложность алгоритма:
последовательность Фибоначчи возрастает с экспоненциальной скоростью, поэтому
алгоритм Евклида работает за (O(log min(a, b))).

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

С понятием НОД связано также понятия наименьшего общего кратного (англ.
least common multiple). Наименьшее общее кратное двух натуральных чисел —
наименьшее натуральное число, которое делится на каждое из них. Оно обозначается
следующим образом:

[lcm(a, b)]

и связано с НОД формулой:

[lcm(a, b) = {a * b over gcd(a, b)}]

Реализация на C++:

1
2
3
4
5
int lcm(int a, int b) {
    return a / gcd(a, b) * b;   //используя форму a * b / gcd(a, b),
                                //можно получить переполнение на этапе a * b,
                                //поэтому следует выполнять деление до умножения
}

Взаимнопростые числа

Числа (a) и (b) называются взаимнопростыми тогда и только тогда, когда они
не имеют общих делителей отличных от (1). То есть в их отношении должно
выполняться условие (gcd(a, b) = 1).

НОД и НОК для произвольного количества чисел

Обе функции легко обобщаются для произвольного числа аргументов
последовательным применением:

[gcd(a, b, c, d) = gcd(gcd(gcd(a, b), c), d)]

[lcm(a, b, c, d) = lcm(lcm(lcm(a, b), c), d)]

Понравилась статья? Поделить с друзьями:
  • Как найти вин код на телефоне
  • Как найти человека по адресу дома бесплатно
  • Как найти сохраненную загрузку
  • Как найти скем я говорила
  • Как найти клеща на коже