计算素数里面除数最大值用(int(prime ** 0.5) +1) ,最好不要用(prime / 2 + 1).在素数值非常大的时候,这两者差距非常明显.
比如104729的开方值:323
除以2的值是52365
再就是尽量用函数返回Ture Flase的判断,
例如: 求第10000个素数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| prime = 2 number = 4 def is_prime(num): for x in range(2, int((num ** 0.5)) + 1): if num % x == 0: return False return True while 1: if is_prime(number): prime += 1 if prime == 10000: break number += 1 print number
|
用时0.5秒得出结果:104729
如果是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| prime = 2 number = 4 def is_prime(num): for x in range(2, int((num / 2)) + 1): if num % x == 0: return False return True while 1: if is_prime(number): prime += 1 if prime == 10000: break number += 1 print number
|
用时42秒,得出结果104729
如果是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| prime = 2 number = 4 while 1: flag = 0 for i in range(2, int(number ** 0.5) + 1): if number % i == 0: flag = 1 if flag == 0: prime += 1 if prime == 10000: break number += 1 print number
|
用时3.0秒,得出结果104729