Реализации алгоритмов/Алгоритм Евклида: различия между версиями
Содержимое удалено Содержимое добавлено
Добавлены реализации и примеры их использования на Rust |
Нет описания правки |
||
Строка 3:
==[[w:Язык_ассемблера|Assembler]]==
===ARM===
Вычитание,
<source lang="arm">
loop CMP Ri, Rj ; проверка условий NE (i != j), GT (i > j) и LT (i < j);
Строка 12:
===Z80===
Вычитание,
<source lang="z80">
GCD_DEHL: ; CALL Inputs: HL,DE; Output: DE
Строка 26:
==[[w:Бейсик|BASIC]]==
Деление с остатком,
===[[w:GW-BASIC|GW-BASIC]] и совместимые диалекты===
<source lang="basic">
Строка 76:
==[[w:C (язык программирования)|C]]/[[w:C++|C++]]==
'''C:''' Тип
<source lang="c">typedef
'''C++:'''
<source lang="cpp">template < typename
Для корректной обработки отрицательных чисел все последующие примеры на C/C++ используют функцию вычисления модуля числа:
<source lang="c">
return (value <
}
</source>
Деление с остатком,
<source lang="c">
while (b) {
c = a % b;
Строка 104 ⟶ 103 :
Более короткое решение:
<source lang="c">
while (b)
b ^= a ^= b ^= a %= b;
Строка 113 ⟶ 112 :
Деление с остатком, рекурсия:
<source lang="c">
return (b == 0) ? abs(a) : gcd(b, a % b);
}
</source>
Вычитание,
<source lang="c">
a = abs(a);
b = abs(b);
Строка 133 ⟶ 132 :
</source>
==[[w:C_Sharp|C#]], [[w:Java|Java]]<ref>Для соответствия правилам оформления кода Java метод следует переименовать в <code>gcd</code> и перенести <code>{</code> в конец предыдущей строки</ref>==
Вместо <code>long</code> можно использовать и другие целочисленные типы — <code>byte</code>, <code>int</code> и т. д.
Деление с остатком,
<source lang="csharp">
static
{
while (b != 0)
b = a % (a = b);
return
}
</source>
Строка 148 ⟶ 147 :
Деление с остатком, рекурсия:
<source lang="csharp">
static
{
return b == 0 ?
}
</source>
Строка 186 ⟶ 185 :
</source>
==[[w:Паскаль (язык программирования)|Pascal]]==▼
Тип <code>IntType</code> определён как:
Деление с остатком, без рекурсии:▼
<source lang="
type IntType = Integer; { Вместо Integer можно подставить любой другой целочисленный тип }
while (b != 0) {▼
T c = a % b;▼
a = b;▼
b = c;▼
</source>
▲==[[w:Паскаль (язык программирования)|Pascal]]==
<source lang="pascal">
function GCD (a, b:
begin
while a * b <> 0 do
Строка 234 ⟶ 206 :
Более быстрый алгоритм:
<source lang="pascal">
function GCD (a, b:
var c:
begin
while b > 0 do
Строка 249 ⟶ 221 :
Деление с остатком, рекурсия:
<source lang="pascal">
function GCD (a, b:
begin
if b = 0 then
Строка 267 ⟶ 239 :
==[[w:PHP|PHP]]==
Деление с остатком,
<source lang="php">
function gcd ($a, $b) {
Строка 303 ⟶ 275 :
==[[w:Python|Python]]==
Деление с остатком,
<source lang="python">
def gcd (a, b):
Строка 318 ⟶ 290 :
==[[:Ruby|Ruby]]==
Деление с остатком,
<source lang="ruby">
def gcd (a, b)
Строка 334 ⟶ 306 :
</source>
Вычитание,
<source lang="ruby">
def gcd (a, b)
Строка 349 ⟶ 321 :
==[[w:Rust (язык программирования)|Rust]]==
Деление с остатком,
<source lang="rust">
extern crate num;
use self::num::FromPrimitive;
use std::
pub fn gcd <
where IntType: Copy + FromPrimitive + PartialEq + Rem<Output = IntType> {
let mut c: IntType;
▲ a = b;
▲ b = c;
}
a
Строка 367 ⟶ 342 :
</source>
Вычитание,
<source lang="rust">
use std::ops::SubAssign;
Строка 411 ⟶ 386 :
==[[w:Глагол (язык программирования)|Глагол]]==
Деление с остатком,
<source>
ЗАДАЧА НОД (a, b: ЦЕЛ): ЦЕЛ;
Строка 427 ⟶ 402 :
==Программируемые микрокалькуляторы «Электроника»==
Деление с остатком,
Корректно обрабатываются любые целые числа (включая 0 и отрицательные). В вычислениях участвуют только регистры стека. Использование: <первое число> В↑ <второе число> В/О С/П (НОД на индикаторе).
===МК-52 / 61 / 152 / 161 / 163 / 1152===
<source>
00. Fx≠0 01. 13 02. ↔ 03. В↑ 04. FВx 05. ÷ 06. FВx 07. ↔ 08. K[x] 09. ×
|