75 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Greatest Common Divisor Euclidean | |||
|  | localeTitle: Величайший общий делитель Евклидов | |||
|  | --- | |||
|  | ## Величайший общий делитель Евклидов
 | |||
|  | 
 | |||
|  | Для этой темы вы должны сначала знать о Величайшем общем делителе (GCD) и операции MOD. | |||
|  | 
 | |||
|  | #### Самый большой общий делитель (GCD)
 | |||
|  | 
 | |||
|  | GCD двух или более целых чисел является наибольшим целым числом, которое делит каждое из целых чисел таким образом, что их остаток равен нулю. | |||
|  | 
 | |||
|  | Пример-   | |||
|  | GCD 20, 30 = 10 _(10 - наибольшее число, которое делит 20 и 30 с остатком в 0)_   | |||
|  | GCD 42, 120, 285 = 3 _(3 - наибольшее число, которое делит 42, 120 и 285 с остатком как 0)_ | |||
|  | 
 | |||
|  | #### Операция "mod"
 | |||
|  | 
 | |||
|  | Операция mod дает вам остаток, когда разделяются два положительных целых числа. Мы пишем его следующим образом:   | |||
|  | `A mod B = R` | |||
|  | 
 | |||
|  | Это означает, что деление A на B дает вам остаток R, это отличается от операции деления, которая дает вам коэффициент. | |||
|  | 
 | |||
|  | Пример-   | |||
|  | 7 mod 2 = 1 _(Разделение 7 на 2 дает остаток 1)_   | |||
|  | 42 mod 7 = 0 _(Разделение 42 на 7 дает остаток 0)_ | |||
|  | 
 | |||
|  | С учетом этих двух понятий вы легко поймете Евклидовы алгоритмы. | |||
|  | 
 | |||
|  | ### Евклидовой алгоритм для наибольшего общего делителя (GCD)
 | |||
|  | 
 | |||
|  | В евклидовом алгоритме найден GCD из 2 чисел. | |||
|  | 
 | |||
|  | Вы лучше поймете этот алгоритм, увидев его в действии. Предполагая, что вы хотите вычислить GCD 1220 и 516, давайте применим Евклидовой алгоритм- | |||
|  | 
 | |||
|  | Предполагая, что вы хотите вычислить GCD 1220 и 516, давайте применим Евклидовой алгоритм-  | |||
|  | 
 | |||
|  | Псевдокод алгоритма-   | |||
|  | Шаг 1: **Пусть `a, b` - два числа**   | |||
|  | Шаг 2: **`a mod b = R`**   | |||
|  | Шаг 3: **Пусть `a = b` и `b = R`**   | |||
|  | Шаг 4: **Повторите шаги 2 и 3 до тех пор, пока `a mod b` станет больше 0**   | |||
|  | Шаг 5: **GCD = b**   | |||
|  | Шаг 6: Закончите | |||
|  | 
 | |||
|  | Код Javascript для выполнения GCD- | |||
|  | 
 | |||
|  | ```javascript | |||
|  | function gcd(a, b) {  | |||
|  |   var R;  | |||
|  |   while ((a % b) > 0)  {  | |||
|  |     R = a % b;  | |||
|  |     a = b;  | |||
|  |     b = R;  | |||
|  |   }  | |||
|  |   return b;  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | Код Javascript для выполнения GCD с использованием рекурсивно- | |||
|  | 
 | |||
|  | ```javascript | |||
|  | function gcd(a, b) {  | |||
|  |   if (b == 0)  | |||
|  |     return a;  | |||
|  |   else  | |||
|  |     return gcd(b, (a % b));  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | Вы также можете использовать Евклидовой алгоритм для поиска GCD более двух чисел. Поскольку GCD ассоциативен, справедлива следующая операция: `GCD(a,b,c) == GCD(GCD(a,b), c)` | |||
|  | 
 | |||
|  | Вычислите GCD первых двух чисел, затем найдите GCD результата и следующее число. Пример - `GCD(203,91,77) == GCD(GCD(203,91),77) == GCD(7, 77) == 7` | |||
|  | 
 | |||
|  | Вы можете найти GCD из `n` чисел таким же образом. |