0.题目如下:
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10 001st prime number?
1.先理解什么是素数:
质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。
2.怎么判断是否是素数:
方法一:在一般领域,对正整数n,如果用2到 之间的所有整数去除,均无法整除,则n为质数。
方法二:1.解释一下代码第29行,在6的倍数两侧可能存在着素数,如:
2 3 5 (6) 7 11 (12) 13 17 (18) 19 23 (24) 29 (30) 31 (36) 37 ......
注意:在6的倍数两侧只是可能存在素数,不在6的倍数两侧就一定不是素数。
2.方法二剩下的代码就是孪生素数的问题,自行百度吧
3.顺带提一下,最高效的办法是方法二。可以自行测试。
1 import time 2 #sqrt是开方 3 from math import sqrt 4 5 6 def check1(prime): 7 if prime == 1: 8 return False 9 for i in range(2, int(sqrt(prime)) + 1): 10 if prime % i == 0:#能被除尽就不是素数 11 return False 12 return True 13 14 #main1 15 # 在一般领域,对正整数n,如果用2到 之间的所有整数去除,均无法整除,则n为质数。 16 def main1(num): 17 prime = 0 18 x = 0 19 while x < num: 20 prime += 1 21 if check1(prime): 22 x += 1 23 return prime 24 25 def check2(prime): 26 i = 5 27 if prime == 2 or prime == 3: 28 return True 29 if prime % 6 != 1 and prime % 6 != 5: 30 return False 31 while i <= sqrt(prime): 32 if prime % i == 0 or prime % (i + 2) == 0:#孪生素数 自行百度 33 return False 34 i += 6 35 return True 36 37 #main2参考链接 38 #http://blog.csdn.net/huang_miao_xin/article/details/51331710 39 40 def main2(num): 41 prime = 1 42 x = 0 43 while x < num: 44 prime += 1 45 if check2(prime): 46 x += 1 47 return prime 48 49 50 if __name__ == '__main__': 51 #给出两种解决的方法 52 start_time1 = time.time() 53 print(main1(10001)) 54 print(time.time() - start_time1) 55 start_time2 = time.time() 56 print(main2(10001)) 57 print(time.time() - start_time2)