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.1311.256
python 3.7.011.462
java 1.8.0_121 HotSpot1.256
c (Apple LLVM version 10.0.0)1.069
go 1.8.11.048

结论

go和c最快,java略慢,python2与python3速度差不多,但比前面三种语言慢10倍。原因我也查了一下,
简单来说是因为2点:
1.Python等动态类型语言,在执行每一个简单的操作时都需要大量的指令才能完成(包括做类型判断,不同类型找出各自的方法,执行不同的指令);
2. C语言和Python的数据结构和算法不同.