我正在用Rust写一个程序来判断大的数字是否是梅森素数.出于某种原因,当我用指数1_000_000_000测试程序时,它需要大约5秒,但当我使用一个小得多的指数82,589,933(生成最大的梅森素数)时,它永远不会完成处理.你们谁知道发生了什么?为什么更大的指数会提高代码的性能?
use std::str::FromStr;
use num::{BigInt, One, Zero};
fn is_prime(number: &BigInt) -> bool {
let mut iteration: BigInt = BigInt::from(2);
while iteration < *number {
if number % &iteration == Zero::zero() {
return false;
}
iteration += BigInt::one();
}
true
}
fn main() {
let exponent: u32 = 1_000_000_000; // when changed to 82,589,933 it never finishes
let number: BigInt = BigInt::from_str("2").unwrap().pow(exponent) - BigInt::one();
let is_prime: bool = is_prime(&number);
println!("2^{exponent} - 1 is prime: {}", is_prime);
}