}
fn main() {
+ println!("Min poly of nimbers up to 2^8:");
+ for n in (0..256).map(FiniteNimber::from) {
+ println!(
+ "{} has minimal polynomial {}",
+ &n,
+ minimal_polynomial(&n)
+ );
+ }
+
+ println!();
+
+ println!("Min poly of largest nimber in each subfield (https://oeis.org/A382121):");
for level in 0..13 {
let n = largest_nimber_in_subfield(level);
println!(
--- /dev/null
+use nimber::FiniteNimber;
+
+fn main() {
+ println!("Multiplication table for nimbers less than 16:");
+ for y in (0..16).map(|y| FiniteNimber::from(y)) {
+ for (xi, x) in (0..16).map(|x| FiniteNimber::from(x)).enumerate() {
+ let product = x * &y;
+ print!("{}{:x}", if xi==0 { "" } else { " " }, product.as_slice()[0]);
+ }
+ println!();
+ }
+
+ println!();
+
+ println!("Multiplication table for powers of 2 less than 2^16:");
+ for y in (0..16).map(|y| FiniteNimber::from(1 << y)) {
+ for (xi, x) in (0..16).map(|x| FiniteNimber::from(1 << x)).enumerate() {
+ let product = x * &y;
+ print!("{}{:04x}", if xi==0 { "" } else { " " }, product.as_slice()[0]);
+ }
+ println!();
+ }
+
+ println!();
+
+ println!("Multiplicative inverses of nimbers up to 2^8:");
+ for y in 0..16 {
+ for (xi, x) in (0..16).enumerate() {
+ let n = FiniteNimber::from(y * 16 + x);
+ let invstr = match n.inverse() {
+ None => "--".into(),
+ Some(inv) => format!("{:02x}", inv.as_slice()[0]),
+ };
+ print!("{}{}", if xi==0 { "" } else { " " }, invstr);
+ }
+ println!();
+ }
+
+ println!();
+
+ println!("Square roots of nimbers up to 2^8:");
+ for y in 0..16 {
+ for (xi, x) in (0..16).enumerate() {
+ let n = FiniteNimber::from(y * 16 + x);
+ let sqrt = n.sqrt();
+ print!("{}{:02x}", if xi==0 { "" } else { " " }, sqrt.as_slice()[0]);
+ }
+ println!();
+ }
+}