python之求解100以内的所有素数

该博客介绍了如何使用Python获取100以内的质数,包括两种方法:借助math库和使用list列表。文章还讨论了判断素数的上限,并提供了相关资源链接。

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

题目: 获取 100 以内的质数。

质数(prime number)又称素数,有无限个。

质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
如:2、3、5、7、11、13、17、19。

一、说明

很简单粗暴的一道题。知识点整理如下:

  1. 判断素数,函数或一般语句均可
  2. 100以内,设置循环上限
  3. 输出格式要求
二、参考代码
2.1 方法一(math库)
import math #导入math库,以便使用里面的一个求平方根的函数
l = [2, 3] #因为range函数上限不能小于下线,所以2,3预先加到素数列表中,直接从5开始(因为知道4不是素数)循环
for i in range(5, 101): #第一层循环,从5到100
    for j in range(2, int(math.sqrt(i))+1): #第二层循环,逐个判断是否有因子
        if i%j == 0: #如果出现整除说明有因子
            break #跳出循环判断下一个
    else: #如果第二层循环结束还没有跳出的话
        l.append(i) #说明是素数,加到列表里
print(" ".join(map(str, l))) #先将列表中的元素变为字符串再用空格连接输出
2.2 方法二(list列表)
#找出100内所有素数
ls = [];
for i in range(100):
    if i < 2:
        continue
    for j in range(2, i):      
        if i%j == 0: 
            #print("{0}不是素数".format(i));
            break;
    else:
        #print("{0}是素数".format(i));
        ls.append(i);
print(ls);

2.3、大神代码
print(" ".join("%s" % x for x in range(2,100) if not [y for y in range(2,x) if x % y ==0]))

果然python什么都能用一行代码解决。。。
其实还看得不是很懂。。。等以后懂了再来讲解。。

h  = [True] * 100
h[:2] = [False, False]
for i in range(2, int(100 ** 0.5) + 1):
    if h[i]:
        h[i*i::i] = [False] * len(h[i*i::i])

s=''
for i, e in enumerate(h):
    if e:
        s += str(i) + ' '
print(s.strip())
三、深入讲解

判断素数的上限最准确的应该使用平方根取整加一,如上面代码所示,但是如果向本题总共就判断到100呢为了简便使用近似的i//2+1即整除2加一也是可以的,验证一下可以发现上限其实是扩大了的(比如根号5=2.23<5/2=2.5)的(根号2根号3进不了循环),所以是不会出错的。


*Reference:
1.资料参考:本文为优快云博主「risuinazoo」
原文链接:https://blog.youkuaiyun.com/weixin_41980474/article/details/80096230

2.来自haotie
可参考判断一个数是不是素数 埃拉托斯特尼筛法 时间复杂度 O(n*lglgn)

3.菜鸟教程
https://www.runoob.com/python/python-get-prime-number.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值