# Ruby 10000 求素数

yakczh · 2015年08月09日 · 最后由 tony612 回复于 2015年08月10日 · 2218 次阅读

ruby2.1 prime.rb

``````def susu(n)
result=[];
for i in 2..n  do
f=true
limit=(i**0.5+1).to_i;
for  j in 2..limitdo
if i % j ==0 then
f=false;break;
end
end
if(f) then
result.push(i);
end
end
return result
end
start = Time.new
out=  susu(10000)
puts (Time.new-start).to_f
# puts out.length
``````

nodejs v0.10.31 prime.js

``````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);
``````

``````h={:ruby=>'prime.rb',:node=>'prime.js'}
result={}
h.map { |k,v| result[k]=[] }
h.each do |runtime,file|
cmd=" #{runtime} #{file} "
(1..10).each do |runs |
#puts cmd
IO.popen(cmd) do |f| time= f.gets
result[runtime].push(time.chomp.to_f)
end
end
end
puts result
result.each do |lang,total|
print lang,9.chr,  total.inject{ |sum, el| sum + el }.to_f / total.size,10.chr
end
``````

ruby 和 nodejs 速度相关并不大

``````<?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);
``````

php 果然是最好的语言

``````require 'prime'
Prime.take_while{|p| p < 10000}
``````

``````def susu(n)
result=[];
(2..n).each do |i|
f=true
limit=(i**0.5+1).to_i;
(2..limit).each do |j|
if i % j ==0 then
f=false;break;
end
end
result<<i if f
end
result
end
start = Time.new
out=  susu(10000)
puts (Time.new-start).to_f
``````

``````def sushu(from,to)
count=0
(from..to).each do |i|
h=i/2
r=true
h.times{|x|r=false if i%(x+1)==0 and (x+1)!=1} if h>0
count+=1 if r
end
count
end
``````

#4 楼 @luikore 不要把小朋友带坏了！

#4 楼 @luikore 我就知道，ruby 才是最好的语言