fix: Remove mod from X subtrahend in dff
The modular operation is likely incorrect in this case. Removig it.
This commit is contained in:
parent
361c6ab813
commit
b54753fe7e
3 changed files with 17 additions and 27 deletions
|
|
@ -11,29 +11,28 @@ pub struct Factors {
|
||||||
pub degree: u32,
|
pub degree: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ddf(f: Polynomial) -> Vec<(Polynomial, usize)> {
|
pub fn ddf(f: Polynomial) -> Vec<(Polynomial, u128)> {
|
||||||
let q = BigUint::pow(&BigUint::from_u8(2).unwrap(), 128);
|
let q = BigUint::pow(&BigUint::from_u8(2).unwrap(), 128);
|
||||||
eprintln!("q: {:?}", q);
|
eprintln!("q: {:?}", q);
|
||||||
|
|
||||||
let mut z: Vec<(Polynomial, usize)> = vec![];
|
let mut z: Vec<(Polynomial, u128)> = vec![];
|
||||||
let mut d: u32 = 1;
|
let mut d: u128 = 1;
|
||||||
let mut f_star = f.clone();
|
let mut f_star = f.clone();
|
||||||
|
|
||||||
let one_cmp = Polynomial::one();
|
let one_cmp = Polynomial::one();
|
||||||
while f_star.degree() >= (2 * d) as usize {
|
while f_star.degree() >= (2 * d) as usize {
|
||||||
let h = Polynomial::x().bpow_mod(q.clone().pow(d), f_star.clone())
|
let h = Polynomial::x().bpow_mod(q.clone().pow(d), f_star.clone()) + Polynomial::x();
|
||||||
+ Polynomial::x().div(&f_star).1;
|
|
||||||
|
|
||||||
let g = gcd(&h, &f_star);
|
let g = gcd(&h, &f_star);
|
||||||
if g != one_cmp {
|
if g != one_cmp {
|
||||||
z.push((g.clone(), d as usize));
|
z.push((g.clone(), d));
|
||||||
f_star = f_star.div(&g).0;
|
f_star = f_star.div(&g).0;
|
||||||
}
|
}
|
||||||
|
|
||||||
d += 1;
|
d += 1;
|
||||||
}
|
}
|
||||||
if f_star != one_cmp {
|
if f_star != one_cmp {
|
||||||
z.push((f_star.clone(), f_star.degree()));
|
z.push((f_star.clone(), f_star.degree() as u128));
|
||||||
} else if z.len() == 0 {
|
} else if z.len() == 0 {
|
||||||
z.push((f.clone(), 1));
|
z.push((f.clone(), 1));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@ use super::poly::Polynomial;
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct Factors {
|
pub struct Factors {
|
||||||
pub factor: Vec<String>,
|
pub factor: Vec<String>,
|
||||||
pub exponent: u32,
|
pub exponent: u128,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sff(mut f: Polynomial) -> Vec<(Polynomial, u32)> {
|
pub fn sff(mut f: Polynomial) -> Vec<(Polynomial, u128)> {
|
||||||
let mut c = gcd(&f, &f.clone().diff());
|
let mut c = gcd(&f, &f.clone().diff());
|
||||||
f = f.div(&c).0;
|
f = f.div(&c).0;
|
||||||
let mut z: Vec<(Polynomial, u32)> = vec![];
|
let mut z: Vec<(Polynomial, u128)> = vec![];
|
||||||
let mut e: u32 = 1;
|
let mut e: u128 = 1;
|
||||||
|
|
||||||
let one_element = Polynomial::new(vec![FieldElement::new(
|
let one_element = Polynomial::new(vec![FieldElement::new(
|
||||||
polynomial_2_block(vec![0], "gcm").unwrap(),
|
polynomial_2_block(vec![0], "gcm").unwrap(),
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,15 @@
|
||||||
{
|
{
|
||||||
"testcases": {
|
"testcases": {
|
||||||
"sandbox": {
|
"sandbox": {
|
||||||
"action": "gfpoly_factor_sff",
|
"action": "gfpoly_factor_ddf",
|
||||||
"arguments": {
|
"arguments": {
|
||||||
"F": [
|
"F": [
|
||||||
"vL77UwAAAAAAAAAAAAAAAA==",
|
"tpkgAAAAAAAAAAAAAAAAAA==",
|
||||||
"mEHchYAAAAAAAAAAAAAAAA==",
|
"m6MQAAAAAAAAAAAAAAAAAA==",
|
||||||
"9WJa0MAAAAAAAAAAAAAAAA==",
|
"8roAAAAAAAAAAAAAAAAAAA==",
|
||||||
"akHfwWAAAAAAAAAAAAAAAA==",
|
"3dUAAAAAAAAAAAAAAAAAAA==",
|
||||||
"E12o/QAAAAAAAAAAAAAAAA==",
|
"FwAAAAAAAAAAAAAAAAAAAA==",
|
||||||
"vKJ/FgAAAAAAAAAAAAAAAA==",
|
"/kAAAAAAAAAAAAAAAAAAAA==",
|
||||||
"yctWwAAAAAAAAAAAAAAAAA==",
|
|
||||||
"c1BXYAAAAAAAAAAAAAAAAA==",
|
|
||||||
"o0AtAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"AbP2AAAAAAAAAAAAAAAAAA==",
|
|
||||||
"k2YAAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"vBYAAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"dSAAAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"69gAAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"VkAAAAAAAAAAAAAAAAAAAA==",
|
|
||||||
"a4AAAAAAAAAAAAAAAAAAAA==",
|
"a4AAAAAAAAAAAAAAAAAAAA==",
|
||||||
"gAAAAAAAAAAAAAAAAAAAAA=="
|
"gAAAAAAAAAAAAAAAAAAAAA=="
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue