1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
//! red_primality provides zero-setup primality testing and factoring for all u64 //! //! # Example //! //! ``` //! use red_primality::{ is_u64_prime, factor, Prime, euler_totient, mobius }; //! //! fn main() { //! // Primality testing //! assert!(is_u64_prime(5)); //! assert!(!is_u64_prime(6)); //! //! // Factoring a near-worst-case semiprime //! let facs: Vec<(Prime, u64)> = factor(18302912619494838287).iter().collect(); //! let p1 = Prime::new(4278190337).unwrap(); //! let p2 = Prime::new(4278190351).unwrap(); //! assert_eq!(facs, vec![(p1, 1), (p2, 1)]); //! //! // Euler's totient function //! assert_eq!(euler_totient(180), (1*2) * (2*3) * (4)); //! //! // mobius(x,y) is the Möbius function of the ratio x/y //! assert_eq!(mobius(90, 2), 0); // 90/2 = 45, contiains 3^2 //! assert_eq!(mobius(90, 3), -1); // 90/3 = 30 = 2*3*5, so -1 //! assert_eq!(mobius(90, 6), 1); // 90/6 = 15 = 3*5, so +1 //! } //! ``` #![deny(missing_docs)] mod prime; pub use prime::*; mod iter; pub use iter::*; mod factor; pub use factor::*;