问题:
a + b + c = 1000, a*a + b*b = c*c
分别以go1.17.7, Python 3.9.0, PHP 7.4.3解答该问题。
每个解答中 tt1()为三遍循环, tt2() 为优化后的解法
可以看到go执行耗时
tt1() 用时 731496100 ns = 0.7314961 s
tt2() 用时 548000 ns = 0.000548 s
可以看到python执行耗时
tt1() 用时: 74647421900 ns = 74.6474219 秒
tt2() 用时: 291977200 ns = 0.2919772 秒
可以看到php执行耗时
对比可以发现go在大的运算方面性能特别高
php的执行性能也比python的高
以上执行时间, 每次执行可能略有差异, 但不妨碍性能测试指标和结果
以下是go的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法
package main
import (
"fmt"
"time"
)
// a + b + c = 1000, a*a + b*b = c*c
// tt1() 用时 731496100 ns = 0.7314961 s
// tt2() 用时 548000 ns = 0.000548 s
//func tt1() {
// for a := 0; a < 1001; a++ {
// for b := 0; b < 1001; b++ {
// for c := 0; c < 1001; c++ {
// if a+b+c == 1000 && a*a+b*b == c*c {
// fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
// }
// }
// }
// }
//}
func tt2() {
for a := 0; a < 1001; a++ {
for b := 0; b < 1001-a; b++ {
c := 1000 - a - b
if a*a+b*b == c*c {
fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
}
}
}
}
func main() {
start := time.Now().UnixNano()
tt2()
end := time.Now().UnixNano()
fmt.Println("用时: ", end-start)
}
以下是python的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法
import time
# python3.9
# tt1() 用时: 74647421900 ns = 74.6474219 秒
# tt2() 用时: 291977200 ns = 0.2919772 秒
# def tt1():
# for a in range(1001):
# for b in range(1001):
# for c in range(1001):
# if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
# print("a=%d,b=%d,c=%d" % (a, b, c))
def tt2():
for a in range(1001):
for b in range(1001 - a):
c = 1000 - a - b
if a ** 2 + b ** 2 == c ** 2:
print("a=%d,b=%d,c=%d" % (a, b, c))
if __name__ == '__main__':
start = time.time_ns()
tt2()
end = time.time_ns()
print('用时: ', end - start)
以下是php的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法