Python求指定范围内质数与合数-详解

目录

1)简介

2)程序实现代码-1- for循环

3)程序实现代码[2] 列表表达式

列表表达式:

-----------------------正文---------------


1)简介

质数,即除1和它本身外没有其他因数的数,又称素数。

合数,即除1和它本身外有其他因数的数。

---注意:1既不是质数有不是合数!

2)程序实现代码-1- for循环

打包一个函数:

def primenum(start,end):

start为起始,end为结束

函数主体

def primenum(start,end):
    prime=[]
    for i in range(start,end+1):
        for j in range(2,i):#不包含1,它本身
            if i%j==0:
                break
        else:#注意else加在for后面
            prime.append(i)
    return prime

输出效果还行,但是有0和1...

添加过滤效果

def primenum(start,end):
    prime=[]
    if start<2:start=2
    for i in range(start,end+1):

        for j in range(2,i):#不包含1,它本身
            if i%j==0:
                break
        else:#注意else加在for后面
            prime.append(i)
    return prime
print(primenum(0,100))

结果:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

合数就好办了,把所有除0,1以外的数算算就好

def hs(start,end):
    num=[]
    if start<2:start=2
    for i in range(start,end+1):
        for j in range(2,i):
            if i%j==0:
                num.append(i)
                break
    return num

------------------------------------------初学者分割线---------------------------------------------------------------

高端玩法来了!||ヽ(* ̄▽ ̄*)ノミ|Ю闪亮登场

3)程序实现代码[2] 列表表达式

列表表达式:

越重要,越前置。

a=[i for i in range(1,10)]
print(a)
>>>[1,2,3,4,5,6,7,8,9]

[使用for循环把每一次i的值套入]

a=[i for i in range(1,10) if i%2==0]
print(a)
>>>[2,4,6,8]

升-级-了!

if放在了for后面,表示每一次i出现还要过if审查才予以复制,否则不算数

a=[i**2 for i in range(1,5)]
print(a)
>>>[1,4,9,16]

将i做了更多操作

a=[j for j in range(i) for i in range(10)]
print(a)

报错,首先的循环前置

a=[j for i in range(10) for j in range(i)]
print(a)
>>>[0, 0, 1, 0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8]

嵌套循环

-----------------------正文---------------

合数求法:

list

a=[]

加入表达式一号(本处使用3~100)

a=[i for i in range(3,100+1)]

进行嵌套,求因数

a=[j for i in range(3,100+1) for j in range(2,i)]

判断是否整除

a=[j for i in range(3,100+1) for j in range(2,i) if i%j==0]

注意:i才是真正的值!

a=[i for i in range(3,100+1) for j in range(2,i) if i%j==0]

接下来要滤除重复值:

a=list(set([i for i in range(3,100+1) for j in range(2,i) if i%j==0]))

好了OK

接下来是质数——但是判断就简单多了,我直接上代码

value = [i for i in range(1 if 1 >= 2 else 2, 100 + 1) if i not in a]

有人想要一行求质数而非一行求合数,一行求质数:

one=[i for i in range(1 if 1 >= 2 else 2, 100 + 1) if i not in [i for i in range(1,100+1) for j in range(2, i) if i % j == 0]]

----------------完-----------------

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unconquerable p

给点吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值