From e8f4a5873236382d9093e40d0e438deb6ada9308 Mon Sep 17 00:00:00 2001 From: Alivecow Date: Sat, 30 Nov 2024 23:46:59 +0100 Subject: [PATCH] fix: Fix error in random polynomial generation in edf Upper bound wa incorrect --- src/tasks/mod.rs | 2 +- src/utils/edf.rs | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs index d26cbac..0b9fce7 100644 --- a/src/tasks/mod.rs +++ b/src/tasks/mod.rs @@ -234,7 +234,7 @@ pub fn task_distribute_st(testcases: &Testcases) -> Result { pub fn task_distribute(testcases: &Testcases) -> Result { let cpus = num_cpus::get(); - if cpus > 1000000 { + if cpus > 100000 { task_distribute_mt(testcases) } else { task_distribute_st(testcases) diff --git a/src/utils/edf.rs b/src/utils/edf.rs index 72f687d..da05db5 100644 --- a/src/utils/edf.rs +++ b/src/utils/edf.rs @@ -4,30 +4,34 @@ use rand::Rng; use super::poly::{gcd, Polynomial}; pub fn edf(f: Polynomial, d: u32) -> Vec { + eprintln!("edf started: {:?}", f.clone().to_c_array()); let q = BigUint::pow(&BigUint::from_u8(2).unwrap(), 128); let n: u32 = (f.degree() as u32) / (d); let mut z: Vec = vec![f.clone()]; let one_cmp = Polynomial::one(); while (z.len() as u32) < n { - //eprintln!("z len {}", z.len()); - //eprintln!("n len {}", n); + eprintln!("z len {}", z.len()); + eprintln!("n len {}", n); - let h = Polynomial::rand(&rand::thread_rng().gen_range(0..f.degree())); - //eprintln!("h: {:02X?}", h); + let h = Polynomial::rand(&rand::thread_rng().gen_range(1..=f.degree())); + eprintln!("h: {:02X?}", h); let exponent = (q.pow(d) - BigUint::one()) / BigUint::from_u8(3).unwrap(); let g = h.bpow_mod(exponent, &f) + Polynomial::one(); - //eprintln!("g before for {:0X?}", g); + eprintln!("g before for {:0X?}", g); - //eprintln!("z before for {:0X?}", z); + eprintln!("z before for {:0X?}", z); - for i in 0..z.len() { + for i in (0..z.len()).rev() { if z[i].degree() as u32 > d { - //eprintln!("Inside if"); + eprintln!("Inside if"); let j = gcd(&z[i], &g); + eprintln!("j != one_cmp {:?}", j != one_cmp); + eprintln!("j != z[i] {:?}", j != z[i]); + eprintln!("Inside if"); if j != one_cmp && j != z[i] { let intemediate = z[i].div(&j).0; z.remove(i); @@ -37,9 +41,10 @@ pub fn edf(f: Polynomial, d: u32) -> Vec { } } - //eprintln!("z after for {:0X?}", z); + eprintln!("z after for {:0X?}", z); } + eprintln!("edf finished"); z }