Реализации алгоритмов/Алгоритм Евклида: различия между версиями

Содержимое удалено Содержимое добавлено
Добавлены реализации и примеры их использования на Rust
Строка 346:
a
end
</source>
 
==[[w:Rust (язык программирования)|Rust]]==
Деление с остатком, без рекурсии:
<source lang="rust">
extern crate num;
 
use self::num::FromPrimitive;
use std::mem;
use std::ops::RemAssign;
 
 
pub fn gcd <T: Copy + FromPrimitive + PartialEq + RemAssign> (mut a: T, mut b: T) -> T {
while b != FromPrimitive::from_u32(0u32).unwrap() {
a %= b;
mem::swap(&mut a, &mut b);
}
a
}
</source>
 
Вычитание, без рекурсии:
<source lang="rust">
use std::ops::SubAssign;
 
 
pub fn gcd <T: Copy + PartialOrd + SubAssign> (mut a: T, mut b: T) -> T {
while a != b {
if a > b {
a -= b;
} else {
b -= a;
}
}
a
}
</source>