10000之内求素数
nodejs 版本
function sushu(n){
var result=[];
for(var i=2;i<=n;i++){
var f=true;
var limit=parseInt( Math.pow(i,0.5)+1);
for(var j=2;j<=limit;j++){
if (i%j==0){
f=false;
break;
}
}
if (f){
result.push(i);
}
}
return result;//#print_r($result);
}
var start=(new Date()).getTime();
var b=sushu(10000);
console.log( ((new Date()).getTime()-start)/1000);
console.log(b.length);
运行时间0.031 php5.6
<?php
function sushu($n){
$result=[];
for($i=2;$i<=$n;$i++ ){
$f=true;
$limit=intval(pow($i,0.5)+1);
#printf("\n".' %s -> %s ',$i,$limit);
for ( $j=2;$j<= $limit; $j++){
if ($i%$j==0){
$f=false;
break;
}
}
if ($f){
$result[]=$i;
}
}
return $result;#print_r($result);
}
$start=microtime(true);
$result=sushu(10000);
echo microtime(true)-$start;
echo "\n";
print_r(count($result));
#print_r($result);
运行时间 0.017982959747314
10 回复
单次比较意义不大,而且你没有说nodejs哪个版本?目前性能差异还是比较大的
@i5ting v0.12.4
nodejs 特点在于IO,不在于cpu运算
我在chrome 里测试的结果。chrome: 44
golang 测试结果:
golang 代码:
package main
import (
"fmt"
"math"
"time"
)
func main() {
start := time.Now()
result := []int{}
for i := 2; i < 10000; i++ {
f := true
limit := math.Pow(float64(i), 0.5) + 1
for j := 2; j <= int(limit); j++ {
if i%j == 0 {
f = false
break
}
}
if f == true {
result = append(result, i)
}
}
duration := time.Since(start)
fmt.Println(len(result))
fmt.Printf("times: %v ms", duration.Seconds()*1e6/float64(1000))
}
node版本0.10.33
在我电脑上速度: 0.012
另var start=(new Date()).getTime();
上面最好加上console.log('');
因为https://cnodejs.org/topic/5599743693cb46f578f0a586
function sushu(n){
var result=[];
for(var i=2;i<=n;i++){
var f=true;
var limit=parseInt( Math.pow(i,0.5)+1);
for(var j=2;j<=limit;j++){
if (i%j==0){
f=false;
break;
}
}
if (f){
result.push(i);
}
}
return result;//#print_r($result);
}
console.log("\n");
var start=(new Date()).getTime();
var b=sushu(10000);
console.log(( ((new Date()).getTime()-start)/1000)+"\n");
console.log(b.length);
0.005 1228 计算时间前后加个输出就变快了,这是什么原理?
看来这种简单运算并不能作为评价标准,《深入浅出》书中对比的是斐波那契数计算。
傲游浏览器
@zh-h fib才是简单运算,求素数有函数调用,有逻辑判断,有循环和中断,有数组操作 ,平时写代码也就是这些东西,全部覆盖了
@yakczh 是吗?但是算斐波那契有很多花样。我觉得本题的两个时间可以先赋值,最后才同一显示出来。