Skip to main content

elegant_pairing/
lib.rs

1#![no_std]
2use num_integer::Roots;
3
4pub fn pair<I: Roots + Clone>(n: I, m: I) -> I{
5    if n >= m{
6        return n.clone() * n.clone() + n + m;
7    }
8    return m.clone() * m + n;
9}
10pub fn unpair<I: Roots + Clone>(z: I) -> (I,I){
11    let q = z.sqrt();
12    let l = z - q.clone() * q.clone();
13    if l < q{
14        return (l,q);
15    }
16    return (q.clone(),l - q);
17}