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 |
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 |
fn g(x: Integer, n: &Integer) -> Integer { |
||
(Integer::from(&x * &x) + 1) % n |
(Integer::from(&x * &x) + 1) % n |
||
} |
} |
||
fn pollard_rho(n |
fn pollard_rho(n: &Integer) -> Integer { |
||
use rug::Assign; |
use rug::Assign; |
||
Line 1,799: | Line 1,799: | ||
} |
} |
||
fn get_prime_factors(n |
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 |