Python找质数的算法改进,开根号如何理解?

for n in range(2, 100):
if n == 2:
print(n)
continue
for i in range(2, int(n **0.5)+1):

     if (n % i) == 0:
         break

     else:
            print(n)

说白了,如果存在一个数比根号更大,并且可以整除,假设这个数为a,那么必然会有另一个b,a*b等于n,而b必然比a小,那么之前肯定判断过了,所以说判断到根号n就全部都判断了

这段代码的目的是在从2到99的范围内遍历每个数字,并检查它是否为素数。如果是素数,则打印该数字。
代码逻辑如下:

  • 1.对于从2到99的每个数字n,执行以下操作:
  • 2.如果n等于2,则打印n并继续下一个数字,因为2是素数。
  • 3.对于从2到n的平方根(向下取整)的每个数字i,执行以下操作:
  • 4.如果n能被i整除(即n是i的倍数),则跳出内层循环,因为n不是素数。
  • 5.否则,打印n,表示n是素数,然后继续下一个数字。

注意:代码中的continue语句用于跳过当前循环中的剩余语句,并开始下一个循环。在这个例子中,当n等于2时,continue语句被执行,使得程序直接进入下一个循环,跳过内层循环的部分。这是因为在这种情况下,内层循环的判断条件永远不会为真,不会打印任何数字。

因为因数是成对出现的,所以没必要遍历全部,只需遍历根号n就行啦

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7729463
  • 你也可以参考下这篇文章:Python 多进程间访问效率低,如何解决?
  • 你还可以看下python参考手册中的 python-互联网数据处理
  • 您还可以看一下 刘顺祥老师的Python数据分析与挖掘课程中的 如何预测糖尿病治疗的效果?小节, 巩固相关知识点
  • 除此之外, 这篇博客: Python常用的内置模块中的 如何导入模块? 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    在这段代码中,**表示幂运算,用来计算一个数的幂。n ** 0.5表示将n的平方根计算出来。而int(n ** 0.5) + 1则表示将计算出来的平方根值取整并加1。

    为什么要计算平方根?这是因为在判断一个数是否为质数时,只需要检查它是否能被小于等于它平方根的数整除即可。如果一个数n不能被小于等于它平方根的任何数整除,那么它一定是质数。

    以一个例子来说明,当n=81时,它的平方根是9。如果我们在2到9之间找到任何一个能整除81的数,那么81就不是质数。但是,如果我们在2到9之间都没有找到能整除81的数,那么我们可以确定81是质数。

    因此,循环for i in range(2, int(n ** 0.5) + 1)用来检查n是否能被2到n的平方根之间的任何数整除。如果找到一个可以整除的数,则说明n不是质数,可以终止循环。若在循环结束后都没有找到能整除的数,那么n就是质数,我们输出它。

    关于优化,你可以进一步减少检查的范围,比如只检查奇数。另外,还可以使用更高效的算法,如埃拉托斯特尼筛法(Sieve of Eratosthenes)。如果需要优化你的代码或者使用其他算法,请告知。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^