给定一个正整数n,返回1~n中所有的素数

在本篇博客中,将展示三种返回一定范围内素数的方法。

方法一:

此方法的思路是:对1~n进行遍历,找到一个处于该区间的整数k时,就判断它是否为素数。代码如下:

def IsPrime(k):        
    if k == 1:
        return False        
    for i in range(2,k):            
        if k % i == 0:                
            return False        
    return True
def GetPrimes(n):        
    primes = []        
    for i in range (1,n):            
        if IsPrime(i):                
            primes.append(i)        
    return primes    
n = int(input("请输入一个整数:"))    
print(GetPrimes(n))

方法二:

此方法的思路为:若一个数不是素数,那么他可以分解成一系列小于它的素数的乘积。#先保存最小的三个素数,对于给定的整数k,他会记录所有小于k的素数。代码如下:

prime_array = [2,3]    
def IsPrime(k):        
    if k == 1:            
        return False        
    if k == 2:            
        return True        
    for i in range(len(prime_array)):            
        if k > prime_array[i] and k % prime_array[i] == 0:
            return False        
    #如果k是素数,把它加入素数数组        
    prime_array.append(k)        
    return True

def GetPrimes(n):        
    primes = []        
    for i in range(1,n+1):            
        if IsPrime(i):                
            primes.append(i)        
    return primes    
n = int(input("请输入一个整数:"))    
print(GetPrimes(n))

此算法的效率会比上以算法效率高出一个数量级。

方法三:

此算法的思路是:删除每个素数的倍数,最后留下的就是素数。代码如下:

def GetPrimes(n):        
    primes = []        
    prime = []        
    for i in range(n+1):            
        primes.append(True)        
    for i in range(2,n+1):            
    #从第二个素数2开始删除,删除一轮下来后,如果接下来的primes[i]是TRUE,那么其对应的整数就是素数            
        if primes[i] == True:                
            p = i                
            j = 2                
            #把当前素数的倍数全部删除                
            while p*j <= n:                    
                primes[p*j] = False                    
                j += 1        
   for i in range(2,len(primes)):            
       if primes[i] == True:                
           prime.append(i)        
   return prime   
n = int(input("请输入一个整数:"))    
print(GetPrimes(n))

此算法效率最高,没有重复计算数字。
通过这一个算例可以看出数学的重要性,学好数学才能提出更高效的算法。

你可能感兴趣的:(python)