#gcd #binary #computing #euclidean #algorithm

gcd-bitwise

计算gcd的二进制欧几里得算法

11个版本

0.3.0 2021年8月30日
0.2.0 2021年8月28日
0.1.9 2021年8月28日

#1094算法

每月36次下载
用于 rotation

MIT 许可证

5KB
50

gcd_bitwise

免责声明:代码非本人所写。

底层代码是coreutils项目的部分。为了方便使用,我为那些不想引入大型依赖项的人进行了分支。我修改了一些部分以适应通用用例,例如实现泛型类型。此crate无依赖项。

更新!

现在参数的数值类型将被转换为 usize 而不是 u32

您可以将 u8u16u32u64usize 数值类型传递给 gcd() 函数。但请注意,您传递的两个数字必须具有相同的类型。传递任何有符号类型(如 i32)可能会得到意外的结果。请参考下面的 快速入门 部分以获取示例。

一些注意事项

此代码使用stein算法,该算法用算术移位、比较和减法代替除法,以优化性能。有关更多信息,请参阅此页面

快速入门

use gcd_bitwise::interface::gcd;

fn main() {
    // For `u8` type
    let num1: u8 = 15;

    let num2: u8 = 51;
     
    let gcd: u8 = gcd(num1, num2);
     
    println!("gcd: {}", gcd); // 3   

    // For `usize` type
    let num1: usize = 65535;

    let num2: usize = 125;
     
    let gcd: usize = gcd(num1, num2);
     
    println!("gcd: {}", gcd); // 5 

    // And on it goes...
}

最终注意: 如果您发现任何问题,请不要犹豫,在github上提交问题。

无运行时依赖