python版本
NUM = 111181111 # 这是素数, 因此在循环结束前不会退出def is_prime(n):i = 2while i < n:if n % i == 0:return Falsei += 1return Trueif __name__ == '__main__':is_prime(NUM)
测试的方式是使用linux的time命令,时间统一用total统计,比如统计go语言执行时间的命令如下:
➜ Desktop time ./speed
./speed 1.01s user 0.02s system 97% cpu 1.048 total
统计java如下:
➜ src git:(master) ✗ time java eg.Speed
java eg.Speed 1.14s user 0.05s system 95% cpu 1.256 total
其他几个代码的版本如下:
java版本
package eg;public class Speed {static final long NUM = 111181111L;public boolean isPrime(long n) {long i = 2L;while (i < n) {if (n % i == 0) {return false;}i += 1;}return true;}public static void main(String[] args) {Speed s = new Speed();s.isPrime(NUM);}
}
c版本
int is_prime(long n) {long i = 2L;while (i < n) {if (n % i == 0) {return 0;}i += 1;}return 1;
}int main() {const long NUM = 111181111L;is_prime(NUM);
}
go版本
package mainfunc is_prime(n int) bool {/* 声明局部变量 */var i = 2for i < n {if n % i == 0 { return false}i++}return true}
func main() {const NUM int = 111181111is_prime(NUM)
}
最终结果统计如下:
| 语言 | 执行时间(total)秒 |
|---|---|
| python 2.7.13 | 11.256 |
| python 3.7.0 | 11.462 |
| java 1.8.0_121 HotSpot | 1.256 |
| c (Apple LLVM version 10.0.0) | 1.069 |
| go 1.8.1 | 1.048 |
结论
go和c最快,java略慢,python2与python3速度差不多,但比前面三种语言慢10倍。原因我也查了一下,
简单来说是因为2点:
1.Python等动态类型语言,在执行每一个简单的操作时都需要大量的指令才能完成(包括做类型判断,不同类型找出各自的方法,执行不同的指令);
2. C语言和Python的数据结构和算法不同.