D, Go, Rust 语言计算第 300000 个素数效率对比:代码与时间测试
D, Go, Rust 语言计算第 300000 个素数效率对比:代码与时间测试
本文将展示使用 D,Go 和 Rust 三种语言计算第 300000 个素数的完整代码,并比较它们的执行时间,帮助您了解不同语言在计算素数时的效率差异。
D 语言代码
import std.stdio, std.datetime;
bool isPrime(int n)
{
if (n <= 1)
return false;
if (n <= 3)
return true;
if (n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i += 6)
if (n % i == 0 || n % (i + 2) == 0)
return false;
return true;
}
void main()
{
auto t1 = SysTime.usecs;
int count = 0, num = 2;
while (count < 300000)
{
if (isPrime(num))
count++;
num++;
}
auto t2 = SysTime.usecs;
writeln('The 300000th prime number is: ', num - 1);
writeln('Time taken: ', t2 - t1, ' microseconds');
}
Golang 代码
package main
import (
"fmt"
"time"
)
func isPrime(n int) bool {
if n <= 1 {
return false
}
if n <= 3 {
return true
}
if n%2 == 0 || n%3 == 0 {
return false
}
for i := 5; i*i <= n; i += 6 {
if n%i == 0 || n%(i+2) == 0 {
return false
}
}
return true
}
func main() {
t1 := time.Now().UnixNano()
count, num := 0, 2
for count < 300000 {
if isPrime(num) {
count++
}
num++
}
t2 := time.Now().UnixNano()
fmt.Println('The 300000th prime number is:', num-1)
fmt.Println('Time taken:', t2-t1, 'nanoseconds')
}
Rust 代码
fn is_prime(n: u64) -> bool {
if n <= 1 {
return false;
}
if n <= 3 {
return true;
}
if n % 2 == 0 || n % 3 == 0 {
return false;
}
let mut i = 5;
while i * i <= n {
if n % i == 0 || n % (i + 2) == 0 {
return false;
}
i += 6;
}
true
}
fn main() {
let t1 = std::time::Instant::now();
let mut count = 0;
let mut num = 2;
while count < 300000 {
if is_prime(num) {
count += 1;
}
num += 1;
}
let t2 = std::time::Instant::now();
println('The 300000th prime number is: {}', num - 1);
println('Time taken: {} microseconds', (t2 - t1).as_micros());
}
运行结果:
- D 语言: ...
- Go 语言: ...
- Rust 语言: ...
结论:
通过以上代码和执行时间对比,我们可以看到 ...。这说明 ...。
注意:
- 以上代码仅供参考,实际运行时间可能会有所不同,具体取决于硬件环境和编译器优化等因素。
- 您可以根据需要修改代码,尝试其他算法,以提高效率。
- 欢迎在评论区分享您的测试结果和优化经验。
原文地址: https://www.cveoy.top/t/topic/oeYg 著作权归作者所有。请勿转载和采集!