開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- プログラミング言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のIV部(関数)のまとめ演習8.(素数)を解いてみる。
その他参考書籍
8.(素数)
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-
def isPrime(y):
x = y // 2
while x > 1:
if y % x == 0:
return "{0} has factor {1}".format(y, x)
x -= 1
return "{0} is prime".format(y)
for x in [13, 13.0, 15, 15.0]:
print(isPrime(x))
# while loop よりfor loopの方が速い
def isPrime1(y):
x = int(y // 2)
for n in range(x, 1, -1):
if y % n == 0:
return "{0} has factor {1}".format(y, n)
return "{0} is prime".format(y)
for x in [13, 13.0, 15, 15.0]:
print(isPrime1(x))
# 実際に速いかどうか速度を比較
n = 10 ** 4
import time
start = time.clock()
for x in range(n):
isPrime(x)
print(time.clock() - start)
start = time.clock()
for x in range(n):
isPrime1(x)
print(time.clock() - start)
入出力結果(Terminal)
$ ./sample.py 13 is prime 13.0 is prime 15 has factor 5 15.0 has factor 5.0 13 is prime 13.0 is prime 15 has factor 5 15.0 has factor 5 2.217495 1.6200230000000002 $
ちなみにJavaScriptの場合。
コード(BBEdit)
var f = function ( y ) {
var x = Math.floor(y / 2);
while ( x > 1 ) {
if ( y % x === 0 ) {
return y + " has factor " + x;
}
x -= 1;
}
return y + " is prime";
},
g = function ( y ) {
var x = Math.floor( y / 2 ),
i;
for ( ; x > 1; x -= 1) {
if( y % x === 0 ){
return y + " has factor " + x;
}
}
return y + " is prime";
},
nums = [13, 13.0, 15, 15.0],
result = "",
i, max, start, n;
for (i = 0, max = nums.length; i < max; i += 1) {
result += f(nums[i]) + "\n";
}
for (i = 0, max = nums.length; i < max; i += 1) {
result += g(nums[i]) + "\n";
}
// pythonではwhile loopよりfor loopの方が速かったけど、
// JavaScriptではどうかを計測して確認
n = Math.pow(10, 4);
start = new Date().getTime();
for (i = 0, max = n; i < max; i += 1) {
f( i );
}
result += (new Date().getTime() - start) / 1000 + "\n";
start = new Date().getTime();
for (i = 0, max = n; i < max; i += 1) {
g( i );
}
result += (new Date().getTime() - start) / 1000 + "\n";
$('#pre0').text(result);
JavaScriptだと、少なくとも今回の場合はwhile loopもfor loopもそんなに変わりないみたい。(FirefoxとSafariで確認)
0 コメント:
コメントを投稿