Python编程:输出小于10000的最大的五个素数(从大到小输出)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def test(num):
for i in range(2,num):
if (num % i) == 0:
return False
else:
return True
if __name__ == '__main__':
index = 0
for i in range(10000,2,-1):
if index >= 5:
break
if test(i) == True :
index = index + 1
print i
试试这个,几十毫秒,这是我能想到的最快的方法了。
>>> import numpy as np
>>> def find_prime_list(n):
"""返回不大于n的质数组成的numpy数组"""
nums = np.arange(n+1) # 生成0到n的数组
nums[1] = 0 # 数组第1和元素置0,从2开始,都是非0的
k, m = 0, pow(n+1, 0.5)
while True: # 循环
primes = nums[nums>0] # 找出所有非0的元素
if primes.any(): # 如果能找到
p = primes[k] # 则第一个元素为素数
k += 1
nums[2*p::p] = 0 # 这个素数的所有倍数,都置为0
if p > m: # 如果找到的素数大于上限的平方根
break # 则退出循环
else:
break # 全部0,也退出循环
return nums[nums>0]
>>> prime_10000 = find_prime_list(10000)
>>> prime_10000[-5:]
array([9931, 9941, 9949, 9967, 9973])
>>> prime_10000[-5:][::-1]
array([9973, 9967, 9949, 9941, 9931])