dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::integer_square_root_with_binary_search_usize::*;

/// \sum_{i=1}^{n} [n/i]

pub fn floor_sum(n: usize) -> usize {
    let mut s = 0;

    let k = isqrt(n);

    for i in 1..n / (k + 1) + 1 {
        s += n / i;
    }

    for x in 1..k + 1 {
        s += x * (n / x - n / (x + 1))
    }

    s
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let cases = vec![(3, 5), (10000000000, 231802823220)];

        for (n, ans) in cases {
            assert_eq!(floor_sum(n), ans);
        }
    }
}