python经典百题之打印素数

题目:找出1-N之间的所有素数,并输出所有素数.

素数又称质数,是指只能被1和自身整除的整数,即除了1和本身以外没有其他因数的正整数。例如,2、3、5、7、11等都是素数。任何大于1的正整数都可以由素数相乘得到,因此素数具有重要的数学意义。

方法一:暴力枚举法

python 复制代码
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def find_prime(n):
    prime_list = []
    for i in range(2, n):
        if is_prime(i):
            prime_list.append(i)
    return prime_list

优点:实现简单,容易理解。

缺点:时间复杂度较高,无法处理较大的素数范围。

方法二:优化枚举法

python 复制代码
def find_prime(n):
    prime_list = []
    for i in range(2, n):
        j = 2
        while j <= int(i ** 0.5):
            if i % j == 0:
                break
            j += 1
        if j > int(i ** 0.5):
            prime_list.append(i)
    return prime_list

优点:减少了部分重复计算,时间复杂度有所降低。

缺点:仍然无法处理较大的素数范围。

方法三:埃氏筛法

python 复制代码
def find_prime(n):
    prime_list = []
    is_prime = [True] * (n+1)
    for i in range(2, n+1):
        if is_prime[i]:
            prime_list.append(i)
            for j in range(i*i, n+1, i):
                is_prime[j] = False
    return prime_list

优点:时间复杂度较低,可以处理较大的素数范围。

缺点:空间复杂度较高,需要一个大小为(n+1)的数组来判断是否为素数。

方法四:欧拉筛法

python 复制代码
def find_prime(n):
    prime_list = []
    is_prime = [True] * (n+1)
    for i in range(2, n+1):
        if is_prime[i]:
            prime_list.append(i)
        for j in range(len(prime_list)):
            if i * prime_list[j] > n:
                break
            is_prime[i * prime_list[j]] = False
            if i % prime_list[j] == 0:
                break
    return prime_list

优点:时间复杂度较低,空间复杂度较低。

缺点:实现较为复杂,需要对已知素数进行筛选。

相关推荐
染翰18 分钟前
lua入门以及在Redis中的应用
开发语言·redis·lua
王者鳜錸28 分钟前
PYTHON让繁琐的工作自动化-函数
开发语言·python·自动化
兔老大RabbitMQ1 小时前
git pull origin master失败
java·开发语言·git
tt5555555555551 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵1 小时前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
科大饭桶2 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
扛麻袋的少年3 小时前
7.Kotlin的日期类
开发语言·微信·kotlin
麻辣清汤3 小时前
结合BI多维度异常分析(日期-> 商家/渠道->日期(商家/渠道))
数据库·python·sql·finebi
钢铁男儿3 小时前
Python 正则表达式(正则表达式和Python 语言)
python·mysql·正则表达式
钢铁男儿3 小时前
Python 正则表达式实战:解析系统登录与进程信息
开发语言·python·正则表达式