tonelli-rs 0.1.0

A Rust implementation of the Tonelli-Shanks algorithm for computing square roots modulo a prime
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use tonelli_rs::{square_roots, tonelli_shanks};

fn main() {
    let n = 2;
    let p = 7;

    if let Some(root) = tonelli_shanks(n, p) {
        println!("Square root: {}", root);
        println!("{}² ≡ {} (mod {})", root, (root * root) % p, p);

        if let Some((r1, r2)) = square_roots(n, p) {
            println!("Both square roots: {} and {}", r1, r2);
            println!("{}² ≡ {}² ≡ {} (mod {})", r1, r2, n, p);
        }
    } else {
        println!("No square root exists");
    }
}