自然数/整数 - 関数 - N vs N2

定理

自然数とそのペアは同型:

\[\mathbb{N} \simeq \mathbb{N}^2.\]

以下の実装はこの同型写像を与える.

/// Natural Numbers - Theorem. N sim N^2
pub fn n_to_nn(n: u128) -> (u128, u128) {
    let mut i = 0;
    let mut n = n;
    while n > i {
        i += 1;
        n -= i;
    }
    (n, i - n)
}

pub fn nn_to_n(a: u128, b: u128) -> u128 {
    (a + b) * (a + b + 1) / 2 + a
}

#[cfg(test)]
mod test_binom_modint {
    use crate::num::n_sim_nn::*;

    #[test]
    fn test_n_to_nn() {
        assert_eq!(n_to_nn(0), (0, 0));
        assert_eq!(n_to_nn(1), (0, 1));
        assert_eq!(n_to_nn(2), (1, 0));
        assert_eq!(n_to_nn(3), (0, 2));
        assert_eq!(n_to_nn(4), (1, 1));
        assert_eq!(n_to_nn(5), (2, 0));
    }

    #[test]
    fn test_nn_to_n() {
        assert_eq!(nn_to_n(0, 0), (0));
        assert_eq!(nn_to_n(0, 1), (1));
        assert_eq!(nn_to_n(1, 0), (2));
        assert_eq!(nn_to_n(0, 2), (3));
        assert_eq!(nn_to_n(1, 1), (4));
        assert_eq!(nn_to_n(2, 0), (5));
    }
}