我有一个非常简单的程序,它从命令行获取整数参数并执行以下任务:
use clap::Parser ;
#[derive(Parser,Default)]
struct Args {
#[arg(short)]
number: u128
}
fn sum(n: u128) -> u128 {
let mut result: u128 = 0;
for i in 1..n { result += n/i; }
result
}
fn main() {
let args = Args::parse() ;
println!("{}", sum(args.number)) ;
}
Run Code Online (Sandbox Code Playgroud)
相当简单,对吧?好吧,当对“大”数字执行它时,例如 999999999,在我的机器上几乎需要十秒钟才能得到结果。
$ time ./target/release/main -n 999999999
20877697533
real 0m9.442s
user 0m9.370s
sys 0m0.030s
Run Code Online (Sandbox Code Playgroud)
但是,如果我禁止使用任何拍手并对值进行硬编码
$ time ./target/release/main -n 999999999
20877697533
real 0m9.442s
user 0m9.370s
sys 0m0.030s
Run Code Online (Sandbox Code Playgroud)
执行时间下降到两秒左右
$ time ./target/release/main
20877697533
real …Run Code Online (Sandbox Code Playgroud) rust ×1