dsalgo 0.3.7

A package for Datastructures and Algorithms.
Documentation
use crate::power_semigroup::pow_semigroup;

/// \sum_{i=0}^{n}a_0r^i
pub fn geometric_series(a0: i64, r: i64, n: usize) -> i64 {
    if r == 0 {
        return a0 as i64;
    }
    (1 - pow_semigroup(&|x, y| x * y, r, n as u64 + 1)) / (1 - r) * a0
}

// TODO
#[cfg(test)]
mod tests {
    #[test]
    fn test() {
        use super::*;
        assert_eq!(geometric_series(3, 4, 3), 255);
        assert_eq!(geometric_series(3, -1, 3), 0);
        assert_eq!(geometric_series(3, 0, 3), 3);
    }
}