鱼C论坛

 找回密码
 立即注册
查看: 2533|回复: 6

[已解决]for循环找素数

[复制链接]
发表于 2022-8-6 21:37:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼B站19课最后的找10以内的素数的代码
for n in range(2,10):
    for x in range(2,n):
        if n % x == 0:
            print(n, '=', x , '*' , n // x)
            break
    else:
             print(n,'是一个素数')
代码如上,只是有两点不明白
1.为什么第二个for要缩进(为什么非要嵌套)
2.为什么else不跟if 对齐而跟for对齐,对齐if后run出来奇奇怪怪的??
最佳答案
2022-8-7 07:36:37
1. 我们知道素数就是除了 1 和它本身其他所有都不能被整除的数
第一层是遍历找素数的范围
第二层则对范围内的每个数从 2 到 n-1 每个除一遍 , 看看是否整除 (range 是左闭右开区间)
整除之后就没必要继续这个数的判断, 直接 break
2. 因为素数的判断要在 2 - n-1 所有的数中判断 , 如果每个数都不能整除才是素数
如果放到内层 if 下 , 假设我们的数字是 9 , 从 2 开始除
那么第一次 9 % 2 != 0
所以跳到 else 内打印 9 是素数 , 但是 9 不是素数
问题在于你应该把所有的数能否整除都判断一遍
如果只是一个不能整除万一后面有可以整除的就错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-6 21:49:37 | 显示全部楼层
1.嵌套是为了对于选定的数依次看能否有除了1和它本身的约数
2.对齐if,只要n不能被小于它的一个数整除,就说它是素数;
  对齐for是因为只有n没有除了1和它本身的约数,才说它是素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-6 21:51:26 | 显示全部楼层
1. range(2,10): 找2-9 中的素数,
    range(2,n),逐个判断2-9中的数是不是素数,(素数:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数)

2.    for x in range(2,n):
        if n % x == 0:
            print(n, '=', x , '*' , n // x)
            break # 如果不是素数就break了,所以else是不会执行的。

注: for + else  for执行完后执行else。
202286_215104.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-6 21:53:21 | 显示全部楼层
1.搞清楚两个for循环的用处就知道为什么要嵌套了
外面的for循环是用来遍历2到9的数的,这个很好理解,10以内的素数吗
而里面的for循环是用来遍历从2到n-1的数的,因为素数的定义是除了1和这个数本身不能被其他数整除,这里要遍历除这个数和1的其他数
因此,需要嵌套
2.这是else的另一个用法:for...else,详见->https://blog.csdn.net/weixin_44022018/article/details/109012854
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-7 07:36:37 | 显示全部楼层    本楼为最佳答案   
1. 我们知道素数就是除了 1 和它本身其他所有都不能被整除的数
第一层是遍历找素数的范围
第二层则对范围内的每个数从 2 到 n-1 每个除一遍 , 看看是否整除 (range 是左闭右开区间)
整除之后就没必要继续这个数的判断, 直接 break
2. 因为素数的判断要在 2 - n-1 所有的数中判断 , 如果每个数都不能整除才是素数
如果放到内层 if 下 , 假设我们的数字是 9 , 从 2 开始除
那么第一次 9 % 2 != 0
所以跳到 else 内打印 9 是素数 , 但是 9 不是素数
问题在于你应该把所有的数能否整除都判断一遍
如果只是一个不能整除万一后面有可以整除的就错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-14 20:31:17 | 显示全部楼层
柿子饼同学 发表于 2022-8-7 07:36
1. 我们知道素数就是除了 1 和它本身其他所有都不能被整除的数
第一层是遍历找素数的范围
第二层则对范围 ...

看不明白为什么第二层,这里除的是什么数字啊,为什么x就是2呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-14 21:38:58 | 显示全部楼层
健达奇趣蛋 发表于 2022-9-14 20:31
看不明白为什么第二层,这里除的是什么数字啊,为什么x就是2呢?

因为素数可以被 1 和 它本身 整除
如果扩大范围 , 会错 , 这样就会整除了
从 2 开始 , 因为 2 最小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 18:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表