日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他

發布時間:2023/12/10 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

免責聲明

我知道人工基準是邪惡的。它們只能針對非常特定的狹窄情況顯示結果。我不認為一種語言比另一種語言更好,因為一些愚蠢的長凳。然而,我不知道為什么結果是如此不同。請在底部查看我的問題。

數學基準描述

基準是簡單的數學計算,找到不同6的素數對(所謂的sexy primes)

例如。性感素質低于100將是:(5 11)(7 13)(11 17)(13 19)(17 23)(23 29)(31 37)(37 43)(41 47)(47 53) )(61 67)(67 73)(73 79)(83 89)(97 103)

結果表

表中:計算時間(秒)

運行:all除了Factor在VirtualBox中運行(Debian unstable amd64 guest,Windows 7 x64主機)

CPU:AMD A4-3305M

Sexy primes up to: 10k 20k 30k 100k

Bash 58.00 200.00 [*1] [*1]

C 0.20 0.65 1.42 15.00

Clojure1.4 4.12 8.32 16.00 137.93

Clojure1.4 (optimized) 0.95 1.82 2.30 16.00

Factor n/a n/a 15.00 180.00

Python2.7 1.49 5.20 11.00 119

Ruby1.8 5.10 18.32 40.48 377.00

Ruby1.9.3 1.36 5.73 10.48 106.00

Scala2.9.2 0.93 1.41 2.73 20.84

Scala2.9.2 (optimized) 0.32 0.79 1.46 12.01

[* 1] – 恐怕想象要花多少時間

代碼列表

C:

int isprime(int x) {

int i;

for (i = 2; i < x; ++i)

if (x%i == 0) return 0;

return 1;

}

void findprimes(int m) {

int i;

for ( i = 11; i < m; ++i)

if (isprime(i) && isprime(i-6))

printf("%d %d\n", i-6, i);

}

main() {

findprimes(10*1000);

}

紅寶石:

def is_prime?(n)

(2...n).all?{|m| n%m != 0 }

end

def sexy_primes(x)

(9..x).map do |i|

[i-6, i]

end.select do |j|

j.all?{|j| is_prime? j}

end

end

a = Time.now

p sexy_primes(10*1000)

b = Time.now

puts "#{(b-a)*1000} mils"

Scala:

def isPrime(n: Int) =

(2 until n) forall { n % _ != 0 }

def sexyPrimes(n: Int) =

(11 to n) map { i => List(i-6, i) } filter { _ forall(isPrime(_)) }

val a = System.currentTimeMillis()

println(sexyPrimes(100*1000))

val b = System.currentTimeMillis()

println((b-a).toString + " mils")

Scala opimized isPrime(同樣的想法在Clojure優化):

import scala.annotation.tailrec

@tailrec // Not required, but will warn if optimization doesn't work

def isPrime(n: Int, i: Int = 2): Boolean =

if (i == n) true

else if (n % i != 0) isPrime(n, i + 1)

else false

Clojure:

(defn is-prime? [n]

(every? #(> (mod n %) 0)

(range 2 n)))

(defn sexy-primes [m]

(for [x (range 11 (inc m))

:let [z (list (- x 6) x)]

:when (every? #(is-prime? %) z)]

z))

(let [a (System/currentTimeMillis)]

(println (sexy-primes (* 10 1000)))

(let [b (System/currentTimeMillis)]

(println (- b a) "mils")))

Clojure優化is-prime?:

(defn ^:static is-prime? [^long n]

(loop [i (long 2)]

(if (= (rem n i) 0)

false

(if (>= (inc i) n) true (recur (inc i))))))

蟒蛇

import time as time_

def is_prime(n):

return all((n%j > 0) for j in xrange(2, n))

def primes_below(x):

return [[j-6, j] for j in xrange(9, x+1) if is_prime(j) and is_prime(j-6)]

a = int(round(time_.time() * 1000))

print(primes_below(10*1000))

b = int(round(time_.time() * 1000))

print(str((b-a)) + " mils")

因子

MEMO:: prime? ( n -- ? )

n 1 - 2 [a,b] [ n swap mod 0 > ] all? ;

MEMO: sexyprimes ( n n -- r r )

[a,b] [ prime? ] filter [ 6 + ] map [ prime? ] filter dup [ 6 - ] map ;

5 10 1000 * sexyprimes . .

Bash(zsh):

#!/usr/bin/zsh

function prime {

for (( i = 2; i < $1; i++ )); do

if [[ $[$1%i] == 0 ]]; then

echo 1

exit

fi

done

echo 0

}

function sexy-primes {

for (( i = 9; i <= $1; i++ )); do

j=$[i-6]

if [[ $(prime $i) == 0 && $(prime $j) == 0 ]]; then

echo $j $i

fi

done

}

sexy-primes 10000

問題

>為什么Scala是這么快?是因為靜態類型嗎?還是它只是使用JVM非常有效?

>為什么Ruby和Python之間有巨大的區別?我認為這兩個不是有點完全不同。也許我的代碼是錯誤的。請指教我!謝謝。 UPD是的,這是我的代碼中的錯誤。 Python和Ruby 1.9是相當相等的。

> Ruby版本之間的生產力令人印象深刻。

>我可以通過添加類型聲明來優化Clojure代碼嗎?它會有幫助嗎?

總結

以上是生活随笔為你收集整理的ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。