Cullen and Woodall numbers: Difference between revisions

Content added Content deleted
(Added Rust solution)
(Rust - use iterators instead of loops)
Line 636: Line 636:
// rug = "1.15.0"
// rug = "1.15.0"


use rug::Integer;
use rug::integer::IsPrime;
use rug::integer::IsPrime;
use rug::Integer;


fn cullen_number(n: u32) -> Integer {
fn cullen_number(n: u32) -> Integer {
Line 651: Line 651:
fn main() {
fn main() {
println!("First 20 Cullen numbers:");
println!("First 20 Cullen numbers:");
for n in 1..21 {
let cullen: Vec<String> = (1..21)
.map(|x| cullen_number(x).to_string_radix(10))
if n > 1 {
print!(" ");
.collect();
println!("{}", cullen.join(" "));
}
print!("{}", cullen_number(n));
}


println!("\n\nFirst 20 Woodall numbers:");
println!("\nFirst 20 Woodall numbers:");
for n in 1..21 {
let woodall: Vec<String> = (1..21)
.map(|x| woodall_number(x).to_string_radix(10))
if n > 1 {
print!(" ");
.collect();
println!("{}", woodall.join(" "));
}
print!("{}", woodall_number(n));
}


println!("\n\nFirst 5 Cullen primes in terms of n:");
println!("\nFirst 5 Cullen primes in terms of n:");
let mut n = 1;
let cullen_primes: Vec<String> = (1..)
.filter_map(|x| match cullen_number(x).is_probably_prime(25) {
let mut count = 0;
IsPrime::No => None,
while count != 5 {
_ => Some(x.to_string()),
if cullen_number(n).is_probably_prime(25) != IsPrime::No {
if count > 0 {
})
print!(" ");
.take(5)
}
.collect();
print!("{}", n);
println!("{}", cullen_primes.join(" "));
count += 1;
}
n += 1;
}


println!("\n\nFirst 5 Woodall primes in terms of n:");
println!("\nFirst 12 Woodall primes in terms of n:");
let woodall_primes: Vec<String> = (1..)
n = 1;
.filter_map(|x| match woodall_number(x).is_probably_prime(25) {
count = 0;
IsPrime::No => None,
while count != 12 {
_ => Some(x.to_string()),
if woodall_number(n).is_probably_prime(25) != IsPrime::No {
if count > 0 {
})
print!(" ");
.take(12)
}
.collect();
print!("{}", n);
println!("{}", woodall_primes.join(" "));
count += 1;
}
n += 1;
}
println!();
}</lang>
}</lang>