用户:
Albert钟查看:3 回复:3 评论:3 创建时间:2021-08-04T10:03:12
-----------------------------水贴分割线---------------------------------------------
首先介绍一下测试的算法----指数列表过筛法:筛法(挨拉托色尼筛法)是一种用来求所有小于N的素数的方法。把从2(素数是指大于1的自然数)开始的某一范围内的正整数从小到大按顺序排列,逐步筛掉非素数留下素数。(百度词条)数学界一般认为这是最快的质数求解法。本次测试取100000以内的质数。
1. Python
import
time
def
generatePrime(
max
):
prime
=
[
2
, ]
num
=
range
(
3
,
max
)
for
i
in
num:
for
p
in
prime:
if
i
%
p
=
=
0
:
break
else
:
print
(i)
prime.append(i)
return
prime
st
=
time.time()
prime
=
generatePrime(
100000
)
print
(prime)
et
=
time.time()
dt
=
et
-
st
print
(dt)
(cpython)单次运行时间:10749ms(这也够慢了)
不得不提,经过几次测(shi)试(bai),使用迭代器可以大大节省运行时间
2. JavaScript
function
generatePrime(max) {
var
prime = [2, ];
for
(
var
i = 3; i <= max; i++) {
for
(
var
j = 0; j < prime.length; j++) {
var
p = prime[j];
if
(i % p == 0) {
break
;
}
}
if
(j == prime.length) {
prime.push(i);
console.log(i);
}
}
return
prime;
}
var
st =
new
Date().getTime();
var
prime = generatePrime(100000);
console.log(prime);
var
et =
new
Date().getTime();
var
dt = et - st;
console.log(dt);
代码普普通通,没有什么特色
(node)单次运行时间:22869ms(!!!!!比Python慢好多、、、)
3. C++
#include <iostream>
#include <vector>
#include <ctime>
using
namespace
std;
vector<
int
> generatePrime(
int
max) {
vector<
int
> prime;
prime.push_back(2);
for
(
int
i = 3; i <= max; i++) {
int
p, j;
for
(j = 0; j < prime.size(); j++) {
p = prime[j];
if
(i % p == 0) {
break
;
}
}
if
(j == prime.size()) {
prime.push_back(i);
cout << i << endl;
}
}
return
prime;
}
int
main() {
clock_t
st =
clock
();
vector<
int
> prime = generatePrime(100000);
// main function
clock_t
et =
clock
();
double
dt = (
double
)(et - st) / CLOCKS_PER_SEC;
cout << dt << endl;
return
0;
}
(g++编译后)单次运行时间:3726ms(不愧是C++)
4. PHP(同喵表ASP等混合编程技术)
<?php
class
runtime {
// from https://www.cnblogs.com/imkun/archive/2012/11/01/2749989.html
var
$StartTime
= 0;
var
$StopTime
= 0;
function
get_microtime() {
list(
$usec
,
$sec
) =
explode
(
' '
, microtime());
return
((float)
$usec
+ (float)
$sec
);
}
function
start() {
$this
->StartTime =
$this
->get_microtime();
}
function
stop() {
$this
->StopTime =
$this
->get_microtime();
}
function
spent() {
return
round
((
$this
->StopTime -
$this
->StartTime) * 1000, 1);
}
}
function
generatePrime(
$max
) {
$prime
=
array
(2);
for
(
$i
= 3;
$i
<=
$max
;
$i
++) {
for
(
$j
= 0;
$j
<
count
(
$prime
);
$j
++) {
$p
= prime[
$j
];
if
(
$i
%
$p
== 0) {
break
;
}
}
if
(
$j
==
count
(
$prime
)) {
array_push
(
$prime
,
$i
);
echo
$i
;
}
}
return
$prime
;
}
$runtime
=
new
runtime;
$runtime
->start();
$prime
= generatePrime(100000);
echo
$prime
;
$runtime
->stop();
echo
$runtime
->spent();
?>
(本地运行溢出,喵php/运行)单次运行时间:15855.9ms(也比Python慢不少)
5. Java(待补充)
Java还在学习阶段,水平不足~~ Java不但烧喵U,还烧脑,保护大脑起见,就不搞Java了,恳请大佬补充!!!
6. Go(MVP)
package main
import
(
"fmt"
"time"
)
func generatePrime(
max
int
) []
int
{
prime :
=
[]
int
{
2
, }
for
i :
=
3
; i <
=
max
; i
+
+
{
var j, p
int
/
/
first declerd
for
j
=
0
; j <
len
(prime); j
+
+
{
p
=
prime[j]
if
i
%
p
=
=
0
{
break
}
}
if
j
=
=
len
(prime) {
prime
=
append(prime, i)
fmt.Println(i)
}
}
return
prime
}
func main() {
st :
=
time.Now().UnixNano()
prime :
=
generatePrime(
100000
)
fmt.Println(prime)
et :
=
time.Now().UnixNano()
dt :
=
float喵((et
-
st)
/
1e6
)
fmt.Println(dt)
}
单次运行时间:2143ms(!!!!!!比C++快1s有余)
Go---yyds!!!!
编者按:本帖纯水,大佬不喜勿喷QwQ