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

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

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

相关推荐
新手村领路人13 分钟前
python打包成exe
python·打包
胡桃不是夹子15 分钟前
torch和torchvision对应版本匹配官网下载
人工智能·python·深度学习
一抓掉一大把32 分钟前
秒杀-StackExchangeRedisHelper连接单例
java·开发语言·jvm
星释1 小时前
Rust 练习册 :Minesweeper与二维数组处理
开发语言·后端·rust
Q_Q19632884751 小时前
python+django/flask基于深度学习的个性化携程美食数据推荐系统
spring boot·python·深度学习·django·flask·node.js·php
胡耀超1 小时前
通往AGI的模块化路径:一个可能的技术架构(同时解答微调与RAG之争)
人工智能·python·ai·架构·大模型·微调·agi
清空mega1 小时前
从零开始搭建 flask 博客实验(常见疑问)
后端·python·flask
xier_ran2 小时前
关键词解释:DAG 系统(Directed Acyclic Graph,有向无环图)
python·算法
开发者小天2 小时前
React中的useRef的用法
开发语言·前端·javascript·react.js
xixixin_2 小时前
【React】检测元素是否出现在用户视窗内
开发语言·前端·javascript·react.js