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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//! Euclidean algorithms.
use crate;
use RemAssign;
/// Computes the greatest common divisor (GCD) of two integers.
///
/// Returns `None` if both integers are zero or if the result cannot be represented by the generic type.
///
/// # Examples
///
/// ```
/// use polymatheia::euclid;
///
/// assert_eq!(euclid::checked_gcd::<u8>(4, 6), Some(2));
/// assert_eq!(euclid::checked_gcd::<u8>(100, 99), Some(1));
/// assert_eq!(euclid::checked_gcd::<u8>(255, 255), Some(255));
/// assert_eq!(euclid::checked_gcd::<u8>(0, 42), Some(42));
/// assert_eq!(euclid::checked_gcd::<u8>(13, 0), Some(13));
/// assert_eq!(euclid::checked_gcd::<u8>(0, 0), None);
/// assert_eq!(euclid::checked_gcd::<i8>(i8::MIN + 1, i8::MIN + 1), Some(i8::MAX));
/// assert_eq!(euclid::checked_gcd::<i8>(i8::MIN, i8::MIN), None);
/// ```
/// Computes the greatest common divisor (GCD) of two integers.
///
/// # Panics
///
/// Panics if both integers are zero or if the result cannot be represented by the generic type.
///
/// # Examples
///
/// ```
/// use polymatheia::euclid;
///
/// assert_eq!(euclid::gcd::<u8>(4, 6), 2);
/// assert_eq!(euclid::gcd::<u8>(100, 99), 1);
/// assert_eq!(euclid::gcd::<u8>(255, 255), 255);
/// assert_eq!(euclid::gcd::<u8>(0, 42), 42);
/// assert_eq!(euclid::gcd::<u8>(13, 0), 13);
/// assert_eq!(euclid::gcd::<i8>(-4, 6), 2);
/// ```