Fermat numbers: Difference between revisions

Content added Content deleted
m (Performance improvement)
m (Rust - reformatted with rustfmt)
Line 1,760: Line 1,760:
use rug::Integer;
use rug::Integer;


fn fermat(n : u32) -> Integer {
fn fermat(n: u32) -> Integer {
Integer::from(Integer::u_pow_u(2, 2u32.pow(n))) + 1
Integer::from(Integer::u_pow_u(2, 2u32.pow(n))) + 1
}
}


fn g(x : Integer, n : &Integer) -> Integer {
fn g(x: Integer, n: &Integer) -> Integer {
(Integer::from(&x * &x) + 1) % n
(Integer::from(&x * &x) + 1) % n
}
}


fn pollard_rho(n : &Integer) -> Integer {
fn pollard_rho(n: &Integer) -> Integer {
use rug::Assign;
use rug::Assign;


Line 1,799: Line 1,799:
}
}


fn get_prime_factors(n : &Integer) -> Vec<Integer> {
fn get_prime_factors(n: &Integer) -> Vec<Integer> {
use rug::integer::IsPrime;
use rug::integer::IsPrime;
let mut factors = Vec::new();
let mut factors = Vec::new();
Line 1,814: Line 1,814:
}
}
factors.push(Integer::from(&f));
factors.push(Integer::from(&f));
m = m/f;
m = m / f;
}
}
factors
factors