From 1caad42e9286a201123f105de9f40f4e351b7478 Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Thu, 3 Jul 2025 18:23:33 -0500 Subject: [PATCH 1/6] Added a new math algorithm for triangular numbers name triangular_number.rs --- src/math/mod.rs | 2 ++ src/math/triangular_number.rs | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/math/triangular_number.rs diff --git a/src/math/mod.rs b/src/math/mod.rs index 7407465c3b0..2d5d1f30e50 100644 --- a/src/math/mod.rs +++ b/src/math/mod.rs @@ -78,6 +78,7 @@ mod sylvester_sequence; mod tanh; mod trapezoidal_integration; mod trial_division; +mod triangular_number; mod trig_functions; mod vector_cross_product; mod zellers_congruence_algorithm; @@ -170,6 +171,7 @@ pub use self::sylvester_sequence::sylvester; pub use self::tanh::tanh; pub use self::trapezoidal_integration::trapezoidal_integral; pub use self::trial_division::trial_division; +pub use self::triangular_number::triangular_number; pub use self::trig_functions::cosine; pub use self::trig_functions::cosine_no_radian_arg; pub use self::trig_functions::cotan; diff --git a/src/math/triangular_number.rs b/src/math/triangular_number.rs new file mode 100644 index 00000000000..bcf33430a42 --- /dev/null +++ b/src/math/triangular_number.rs @@ -0,0 +1,38 @@ +// Triangular Numbers: Function to the Nth Triangular Number +// Wikipedia Reference : https://en.wikipedia.org/wiki/Triangular_number + +pub fn triangular_number(n: u64) -> u64 { + let m: u64 = (n | 1) * ((n + 1) / 2); + return m; +} + +#[cfg(test)] +mod tests { + use super::*; + + macro_rules! test_triangular_number { + ($($name:ident: $inputs:expr,)*) => { + $( + #[test] + fn $name() { + let (n, expected) =$inputs; + assert_eq!(triangular_number(n), expected); + } + )* + } + } + + test_triangular_number! { + input_0: (1, 1), + input_1: (2, 3), + input_2: (3, 6), + input_3: (4, 10), + input_4: (5, 15), + input_5: (6, 21), + input_6: (7, 28), + input_7: (8, 36), + input_8: (9, 45), + input_9: (10, 55), + input_10: (11, 66), + } +} From 7d41d09a81bb82d0ceb203d6558a5308c7f6262c Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Thu, 3 Jul 2025 19:05:01 -0500 Subject: [PATCH 2/6] Added a new math algorithm for triangular numbers name triangular_number.rs --- src/math/triangular_number.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/math/triangular_number.rs b/src/math/triangular_number.rs index bcf33430a42..e6c41ac391a 100644 --- a/src/math/triangular_number.rs +++ b/src/math/triangular_number.rs @@ -3,7 +3,7 @@ pub fn triangular_number(n: u64) -> u64 { let m: u64 = (n | 1) * ((n + 1) / 2); - return m; + m } #[cfg(test)] @@ -23,16 +23,8 @@ mod tests { } test_triangular_number! { - input_0: (1, 1), - input_1: (2, 3), - input_2: (3, 6), - input_3: (4, 10), - input_4: (5, 15), input_5: (6, 21), - input_6: (7, 28), - input_7: (8, 36), - input_8: (9, 45), input_9: (10, 55), - input_10: (11, 66), + input_10: (100, 5050), } } From 15c3a04f6067605c8e4c915e4ba546b3b8725fcd Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Fri, 4 Jul 2025 00:16:32 -0500 Subject: [PATCH 3/6] Added a new math algorithm for triangular numbers name triangular_number.rs --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 564a7813807..af4b172d60d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -255,6 +255,7 @@ * [Tanh](https://github.com/TheAlgorithms/Rust/blob/master/src/math/tanh.rs) * [Trapezoidal Integration](https://github.com/TheAlgorithms/Rust/blob/master/src/math/trapezoidal_integration.rs) * [Trial Division](https://github.com/TheAlgorithms/Rust/blob/master/src/math/trial_division.rs) + * [Triangular Number](https://github.com/TheAlgorithms/Rust/blob/master/src/math/triangular_number.rs) * [Trig Functions](https://github.com/TheAlgorithms/Rust/blob/master/src/math/trig_functions.rs) * [Vector Cross Product](https://github.com/TheAlgorithms/Rust/blob/master/src/math/vector_cross_product.rs) * [Zellers Congruence Algorithm](https://github.com/TheAlgorithms/Rust/blob/master/src/math/zellers_congruence_algorithm.rs) From 5d944230302120b3e674ad8b1a93a711f09be907 Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Sat, 5 Jul 2025 15:24:55 -0500 Subject: [PATCH 4/6] Implemented BigUint --- src/math/triangular_number.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/math/triangular_number.rs b/src/math/triangular_number.rs index e6c41ac391a..fb5d664ef07 100644 --- a/src/math/triangular_number.rs +++ b/src/math/triangular_number.rs @@ -1,8 +1,8 @@ // Triangular Numbers: Function to the Nth Triangular Number // Wikipedia Reference : https://en.wikipedia.org/wiki/Triangular_number - -pub fn triangular_number(n: u64) -> u64 { - let m: u64 = (n | 1) * ((n + 1) / 2); +use num_bigint::BigUint; +pub fn triangular_number(n: u64) -> BigUint { + let m: BigUint = ((n | 1) * ((n + 1) / 2)).into(); m } @@ -23,8 +23,8 @@ mod tests { } test_triangular_number! { - input_5: (6, 21), - input_9: (10, 55), - input_10: (100, 5050), + input_5: (6, BigUint::from(21u32)), + input_9: (10, BigUint::from(55u32)), + input_10: (100, BigUint::from(5050u32)), } } From 29403edd5a898b88624417d457c73d440a8f1a64 Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Sun, 6 Jul 2025 23:16:27 -0500 Subject: [PATCH 5/6] Added comments explaining what the module provides. Removed BigUint for being overkill. Removed the use and returning of the variable m. Renamed the names of the test cases to something more logical. --- src/math/triangular_number.rs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/math/triangular_number.rs b/src/math/triangular_number.rs index fb5d664ef07..f77d4877189 100644 --- a/src/math/triangular_number.rs +++ b/src/math/triangular_number.rs @@ -1,9 +1,12 @@ // Triangular Numbers: Function to the Nth Triangular Number // Wikipedia Reference : https://en.wikipedia.org/wiki/Triangular_number -use num_bigint::BigUint; -pub fn triangular_number(n: u64) -> BigUint { - let m: BigUint = ((n | 1) * ((n + 1) / 2)).into(); - m + +// This program provides a function to calculate the nth triangular number defined by T_n = 1 + 2 + +// ... + n = (n^2 + 2)/ = n(n + 1)/2 = (n + 1) choose 2. + +//returns the nth triangular number +pub fn triangular_number(n: u64) -> u64 { + (n | 1) * ((n + 1) / 2) } #[cfg(test)] @@ -23,8 +26,11 @@ mod tests { } test_triangular_number! { - input_5: (6, BigUint::from(21u32)), - input_9: (10, BigUint::from(55u32)), - input_10: (100, BigUint::from(5050u32)), + input_0: (0, 0), + input_1: (1, 1), + input_2: (6, 21), + input_3: (10, 55), + input_4: (21, 231), + input_5: (100, 5050), } } From bc623f3950f0a51a320770b5731521f2445b1c7d Mon Sep 17 00:00:00 2001 From: WinterPancake Date: Mon, 7 Jul 2025 12:36:38 -0500 Subject: [PATCH 6/6] Fixed typo --- src/math/triangular_number.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/math/triangular_number.rs b/src/math/triangular_number.rs index f77d4877189..3a9980f5e99 100644 --- a/src/math/triangular_number.rs +++ b/src/math/triangular_number.rs @@ -2,7 +2,7 @@ // Wikipedia Reference : https://en.wikipedia.org/wiki/Triangular_number // This program provides a function to calculate the nth triangular number defined by T_n = 1 + 2 + -// ... + n = (n^2 + 2)/ = n(n + 1)/2 = (n + 1) choose 2. +// ... + n = (n^2 + 2)/2 = n(n + 1)/2 = (n + 1) choose 2. //returns the nth triangular number pub fn triangular_number(n: u64) -> u64 {