use std::io;
// from
// stackoverflow.com/questions/73682463/
// my-prime-number-sieve-is-extremely-slow-even-with-release
// edited by stackoverflow.com/users/849891/will-ness
pub fn number_to_vector(number: i32) -> Vec<i32> {
let mut numbers: Vec<i32> = Vec::new();
for i in 1..number + 1 {
numbers.push(i);
}
return numbers;
}
pub fn get_user_input(prompt: &str) -> i32 {
println!("{}", prompt);
let mut user_input: String = String::new();
io::stdin().read_line(&mut user_input).expect("Failed to read line");
let number: i32 = user_input.trim().parse().expect("Please enter an integer!");
return number;
}
fn main() {
let user_input: i32 = get_user_input("Enter a positive integer: ");
let mut numbers: Vec<i32> = number_to_vector(user_input);
numbers.
remove(numbers.
iter().
position(|x
| *x
== 1).
unwrap()); let mut numbers_to_remove: Vec<i32> = Vec::new();
let mut primes: Vec<i32> = Vec::new();
let mut i = 0;
let ceiling_root
: i32
= (user_input as f64
).
sqrt().
ceil() as i32
;
for i in 2..ceiling_root + 1 {
for j in i..(user_input/i) + 1 {
numbers_to_remove.push(i * j);
}
}
numbers_to_remove.sort_unstable();
numbers_to_remove.dedup();
//numbers_to_remove.retain(|x| *x <= user_input);
/* for n in numbers_to_remove {
if numbers.iter().any(|&i| i == n) {
numbers.remove(numbers.iter().position(|x| *x == n).unwrap());
}
} */
for n in numbers {
if n < numbers_to_remove[i] {
primes.push(n);
}
else {
i += 1;
}
}
//println!("Prime numbers up to {}: {:?}", user_input, numbers);
println!("Last prime number up to {}: {:?}", user_input, primes.last());
println!("Total prime numbers up to {}: {:?}", user_input,
primes.iter().count());
}