Merge sff runner adaption #24
1 changed files with 9 additions and 12 deletions
|
|
@ -1,5 +1,3 @@
|
||||||
use std::usize;
|
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::utils::{
|
use crate::utils::{
|
||||||
|
|
@ -12,13 +10,13 @@ use super::poly::Polynomial;
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
struct Factors {
|
struct Factors {
|
||||||
factor: Vec<String>,
|
factor: Vec<String>,
|
||||||
exponent: usize,
|
exponent: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sff(mut f: Polynomial) -> Vec<Polynomial> {
|
pub fn sff(mut f: Polynomial) -> Vec<(Polynomial, u32)> {
|
||||||
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> = vec![];
|
let mut z: Vec<(Polynomial, u32)> = vec![];
|
||||||
let mut e: u32 = 1;
|
let mut e: u32 = 1;
|
||||||
|
|
||||||
let one_element = Polynomial::new(vec![FieldElement::new(
|
let one_element = Polynomial::new(vec![FieldElement::new(
|
||||||
|
|
@ -28,7 +26,7 @@ pub fn sff(mut f: Polynomial) -> Vec<Polynomial> {
|
||||||
while f != one_element {
|
while f != one_element {
|
||||||
let y = gcd(&f, &c);
|
let y = gcd(&f, &c);
|
||||||
if f != y {
|
if f != y {
|
||||||
z.push(f.div(&y).0);
|
z.push(((f.div(&y).0), e));
|
||||||
}
|
}
|
||||||
|
|
||||||
f = y.clone();
|
f = y.clone();
|
||||||
|
|
@ -38,8 +36,8 @@ pub fn sff(mut f: Polynomial) -> Vec<Polynomial> {
|
||||||
|
|
||||||
if c != one_element {
|
if c != one_element {
|
||||||
let r = sff(c.sqrt());
|
let r = sff(c.sqrt());
|
||||||
for f_star in r {
|
for (f_star, e_star) in r {
|
||||||
z.push(f_star);
|
z.push((f_star, 2 * e_star));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,13 +76,12 @@ mod tests {
|
||||||
|
|
||||||
let mut factors = sff(poly_f);
|
let mut factors = sff(poly_f);
|
||||||
factors.sort();
|
factors.sort();
|
||||||
|
|
||||||
let mut result: Vec<Factors> = vec![];
|
let mut result: Vec<Factors> = vec![];
|
||||||
|
|
||||||
for (exponent, factor) in factors.iter().enumerate() {
|
for (factor, exponent) in factors {
|
||||||
result.push(Factors {
|
result.push(Factors {
|
||||||
factor: factor.clone().to_c_array(),
|
factor: factor.to_c_array(),
|
||||||
exponent: exponent + 1,
|
exponent,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue