| Crates.io | gcdn |
| lib.rs | gcdn |
| version | 0.2.0 |
| created_at | 2025-10-28 06:34:04.864813+00 |
| updated_at | 2025-10-28 06:35:46.926168+00 |
| description | An algorithmically faster implementation of variadic GCD. |
| homepage | |
| repository | https://github.com/atlv24/gcdn |
| max_upload_size | |
| id | 1904270 |
| size | 31,509 |
gcdn is an algorithmically faster implementation of variadic GCD.
It outperforms chaining implementations such as gcd(gcd(a,b), c)
by over 40% in some workloads.
This is a novel algorithm that I wrote in 2017 as part of some experiments in C# and ported to Rust in 2021, but have continually delayed releasing out of hopes of writing a paper about it someday.
The main idea is to sort, and then do some binary-euclidean-algorithm tricks that use knowledge of all arguments to accelerate evaluation.
Please consult the documentation for more information.
Add it to your Cargo.toml:
[dependencies]
gcdn = "0.1"
assert_eq!(gcd4(15, 120, 30, 25), 5u32);
// needs mutable access because it runs the algorithm in-place to avoid allocation
assert_eq!(gcdn(&mut [15, 120, 30, 25]), 5u32);
gcdn is dual-licensed under either:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.