|

楼主 |
发表于 2022-10-22 23:24:52
|
显示全部楼层
本帖最后由 jcpython2 于 2022-10-22 23:36 编辑
抱歉老哥,奋斗五个小时了,我还没解出来
我只能回答你你那段代码我应该是理解的
- def IsPrime(n):
- r = False
- if n > 1:
- for i in range(2 , n):
- if n % i == 0 : break
- else:
- r = True
- return r
- for i in range(100):
- if( IsPrime(i)):
- print(i,end = " ")
- """"""""""
- 这段代码看明白
- 函数内假设代入7
- 分别循环 % 2 3 4 5 6
- 余 2 得1
- 余 3 得1
- 余 4 得3
- 余 5 得2
- 余 6 得1
- 7内所有数均没有触发==0break跳出循环
- for循环自动进入else部分
- r 赋值为True
- 这里主要通过质数的一个判定条件:质数成立的条件是1和自身外没有其他因子(除不尽,必然有余数)
- 1和这个数自身先不考量,也就是某数除去 2到这个数-1 范围内 都除不尽
- 他必然只能除1和自己能除尽
- 所以他是质数
- PS:这里学到了for完没停止循环就自动进入else用法
- """""""""
复制代码
至于我那个 i * i > n 问题,我试着搜索质数 因子 余数等数学概念并结合你说的内容,都找不到我能理解到的内容。
我整晚在一步一步一个数一个数代入代码中,最后别说逻辑了,脑子转不过来了,我明早早起再试试
现在我能勾勒到的就是
减低循环检索次数,增加程序效率,但个中原理无法吃透,可能是数学逻辑我没基础的缘故
以下是我无用功的备注,现在写完脑子乱了,转不过来
- def IsPrime(n):
- if n <= 1 or n % 2 == 0 and n != 2:
- #n触发0和1或 n无余数能除尽并且不为2(012为质数)
- return False
- elif n == 2:
- return True
- else:
- for i in range(3,n,2):
- #假设n = 13进入for循环,i为 3_5_7_9_11
- #假设轮到 i = 3
- if n % i == 0: #13 % 3 == 3 不触发
- return False
- if i * i > n: #3 * 3 > 13 不触发 3不触发到跳出,循环继续到5
- break
- return True
- for i in range(20): #假设 i 轮到13代入函数
- if( IsPrime(i)):
- print(i,end = " ")
复制代码 |
|