for循环找素数
小甲鱼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出来奇奇怪怪的?? 1.嵌套是为了对于选定的数依次看能否有除了1和它本身的约数
2.对齐if,只要n不能被小于它的一个数整除,就说它是素数;
对齐for是因为只有n没有除了1和它本身的约数,才说它是素数 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 + elsefor执行完后执行else。
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 1. 我们知道素数就是除了 1 和它本身其他所有都不能被整除的数
第一层是遍历找素数的范围
第二层则对范围内的每个数从 2 到 n-1 每个除一遍 , 看看是否整除 (range 是左闭右开区间)
整除之后就没必要继续这个数的判断, 直接 break
2. 因为素数的判断要在 2 - n-1 所有的数中判断 , 如果每个数都不能整除才是素数
如果放到内层 if 下 , 假设我们的数字是 9 , 从 2 开始除
那么第一次 9 % 2 != 0
所以跳到 else 内打印 9 是素数 , 但是 9 不是素数
问题在于你应该把所有的数能否整除都判断一遍
如果只是一个不能整除万一后面有可以整除的就错了 柿子饼同学 发表于 2022-8-7 07:36
1. 我们知道素数就是除了 1 和它本身其他所有都不能被整除的数
第一层是遍历找素数的范围
第二层则对范围 ...
看不明白为什么第二层,这里除的是什么数字啊,为什么x就是2呢?{:5_107:} 健达奇趣蛋 发表于 2022-9-14 20:31
看不明白为什么第二层,这里除的是什么数字啊,为什么x就是2呢?
因为素数可以被 1 和 它本身 整除
如果扩大范围 , 会错 , 这样就会整除了
从 2 开始 , 因为 2 最小
页:
[1]