输出1-10000之间的质数python

本文介绍了三种Python实现1-10000之间质数的方法:1) 利用合数最大因数不超过其开方的性质;2) 埃拉托斯特尼筛法;3) 优化后的埃拉托斯特尼筛法,包括减少i的范围和初始设置j为i*i。代码示例详细展示了每种方法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、法一:一个合数的所有因数最大的不会超过这个数的开方

a b = n ab=n ab=n
a < = s q r t ( n ) a<=sqrt(n) a<=sqrt(n)
b < = s q r t ( n ) b<=sqrt(n) b<=sqrt(n)

# # 1-10000里面的质数
import math
res = [2] # 保存结果
n = 10000
for i in range(3,n,2): # 2个步进,因为除了2所有的偶数都不会是素数
    flag = 1
    for j in range(2,math.floor(math.sqrt(i))+1):
        if i%j == 0:
            flag = 0 # 有能够被整除的了,所以不是素数
            break
    if flag: # 全程没有被整除
        res.append(i)
print(res)

二、法二:Eratosthenes筛(埃氏筛)

在这里插入图片描述
上图思想来自知乎大佬
翻译成python的代码如下:

is_prime = [None for i in range(10001)] #一个布尔数组
n = 10000
for i in range(2,n+1):
    is_prime[i] = True #假设这些都是素数
for i in range(2,n+1):
    for j in range(2*i,n+1,i): # j=2*i,j=3*i,j=4*i,....所以这些j肯定都不是素数
        is_prime[j] = False
res = []
for i in range(n+1):
    if is_prime[i] == True: #把最后保留下来的,加到结果里面
       res.append(i)
print(res)

三、法三:优化埃氏筛

优化一:每个合数必然有质因子,所以只用质数来筛除合数
优化二:缩小 i i i的范围,只到 s q r t ( n ) sqrt(n) sqrt(n),因为太大后面也没意义,因为最大的就是n
优化三: j j j 的初值变为 i ∗ i i*i ii
翻译成代码:

is_prime = [None for i in range(10001)] #一个布尔数组
n = 10000
for i in range(2,n+1):
    is_prime[i] = True #假设这些都是素数
for i in range(2,math.floor(math.sqrt(n))+1):
    if is_prime[i]: # 说明没有已经筛选过的合数
        for j in range(i*i,n+1,i): # j=2*i,j=3*i,j=4*i,....所以这些j肯定都不是素数
            is_prime[j] = False
res = []
for i in range(n+1):
    if is_prime[i] == True: #把最后保留下来的,加到结果里面
       res.append(i)
print(res)

不当之处,还望指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值