求大佬带我:输出小于10000的最大的五个素数(从大到小输出)

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])