pub fn gcd(a: u64, b: u64) -> Result<u64, String>Expand description
This uses Euclid’s theorem to return the greatest common divisor between two numbers. If the numbers are equal, the greatest common divisor is the number. Zero cannot be one of the inputs, an error will be returned if a or b is equal to zero
§Examples
use rs_algo::math::*;
let divisor = gcd(30, 21);
assert_eq!(Ok(3), divisor);Examples found in repository?
examples/algo.rs (line 69)
7fn main() {
8 let mut a = vec![
9 117, 1, 3, 99, 10, 7, 7, 2, 11, -5, 4, 9, 32, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 32, 1, 3,
10 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 2, 11, -5, 4, 9, 32, 1, 3, 99, 10, 7, 2, 11, -5,
11 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 8,
12 ];
13 let mut b = vec![
14 117, 1, 3, 99, 10, 7, 7, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 817, 1, 3,
15 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5,
16 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 8,
17 ];
18 let mut c = vec![
19 117, 1, 3, 99, 10, 7, 7, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 817, 1, 3,
20 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5,
21 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 8,
22 ];
23 let mut d = vec![
24 117, 1, 3, 99, 10, 7, 7, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 817, 1, 3,
25 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 2, 11, -5, 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5,
26 4, 9, 817, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 87, 1, 3, 99, 10, 7, 2, 11, -5, 4, 9, 8,
27 ];
28
29 // Get a sorted array without changing the original
30 let sorted_bubble = bubble::sort(&a);
31 let sorted_insertion = insertion::sort(&b);
32 let sorted_merge = merge::sort(&c);
33 let sorted_quick = quick::sort(&d);
34
35 // This will sort the vector passed in, changing the original vector order
36 merge::sort_mut(&mut a);
37 quick::sort_mut(&mut b);
38 insertion::sort_mut(&mut c);
39 bubble::sort_mut(&mut d);
40
41 // get a new longest common sequence object
42 let sequence = LCSubsequence::new_subsequence("leighxxxft".to_string(), "right".to_string());
43 assert_eq!(sequence.subsequence_len, 4);
44 assert_eq!(sequence.get_longest_subsequence(), Some("ight".to_string()));
45
46 // get a new longest common substring
47 let substring = LCSubstring::new_substring(
48 "!!!!Hello WorldXXXXX".to_string(),
49 "XXX Hello World@cvcvcvc".to_string(),
50 );
51 assert_eq!(substring.substring_len, 11);
52 assert_eq!(
53 substring.get_longest_substring(),
54 Some("Hello World".to_string())
55 );
56
57 // search our array. Binary search needs the array to already be sorted
58 match binary::search(817, &a) {
59 Some(value) => println!("our array has value {}", value),
60 None => println!("our array dosen't have value 817"),
61 }
62
63 match binary::index_of(817, &a) {
64 Some(index) => println!("index of 817 is {}", index),
65 None => println!("no index of 817, guess it's not in there"),
66 }
67
68 // common math functions
69 let divisor = math::gcd(30, 21);
70 assert_eq!(Ok(3), divisor);
71
72 let factor = math::factors(9124);
73 assert_eq!(Some(vec![2, 4, 2281, 4562]), factor);
74}