pub fn is_prime(n: u64) -> bool {
// Handle edge cases first
if n <= 1 {
return false;
}
// Special case for 2 (the only even prime)
if n == 2 {
return true;
}
// Eliminate even numbers > 2
if n % 2 == 0 {
return false;
}
// Check divisors up to sqrt(n)
let sqrt_n
= (n as f64
).
sqrt() as u64
+ 1; for i in (3..sqrt_n).step_by(2) {
if n % i == 0 {
return false;
}
}
true
}
fn main() {
let numbers = [2, 15, 23, 49, 1_000_000_007];
for &n in &numbers {
println!("{} is {}a prime", n, if is_prime(n) { "" } else { "not " });
}
}
cHViIGZuIGlzX3ByaW1lKG46IHU2NCkgLT4gYm9vbCB7CiAgICAvLyBIYW5kbGUgZWRnZSBjYXNlcyBmaXJzdAogICAgaWYgbiA8PSAxIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIDIgKHRoZSBvbmx5IGV2ZW4gcHJpbWUpCiAgICBpZiBuID09IDIgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgLy8gRWxpbWluYXRlIGV2ZW4gbnVtYmVycyA+IDIKICAgIGlmIG4gJSAyID09IDAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBDaGVjayBkaXZpc29ycyB1cCB0byBzcXJ0KG4pCiAgICBsZXQgc3FydF9uID0gKG4gYXMgZjY0KS5zcXJ0KCkgYXMgdTY0ICsgMTsKICAgIGZvciBpIGluICgzLi5zcXJ0X24pLnN0ZXBfYnkoMikgewogICAgICAgIGlmIG4gJSBpID09IDAgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgdHJ1ZQp9CgpmbiBtYWluKCkgewogICAgbGV0IG51bWJlcnMgPSBbMiwgMTUsIDIzLCA0OSwgMV8wMDBfMDAwXzAwN107CiAgICAKICAgIGZvciAmbiBpbiAmbnVtYmVycyB7CiAgICAgICAgcHJpbnRsbiEoInt9IGlzIHt9YSBwcmltZSIsIG4sIGlmIGlzX3ByaW1lKG4pIHsgIiIgfSBlbHNlIHsgIm5vdCAiIH0pOwogICAgfQp9