几种简单的求素数算法的复杂度分析
admin
2023-07-23 08:22:15
0
    素数的算法有很多种,现在主要讲两种算法及其改进版本的复杂度分析,解释性能提升的幅度。同时应用一个素数定理:素数的平方一定是合数,那么在范围内最大数的开方范围内找不到能整除的数,那么这个数是素数。应用这个定理可以将取模范围的空间复杂度从O(n)降为O(n**0.5).现以求100000内素数为例,两种算法分别是:
      1.基础思路是去掉偶数,包括取模的范围,代码如下:

print(2)
for i in range(3,100000,2):
  for a in range(3,int(i**0.5)+1,2):
    if i%a == 0:
     break
    else:
     print(i,end = ' ')
'''

                            *此两层循环的算法的计算复杂度为(0.5*n*((n**0.5)+1)/2),空间复杂度为O(n**1.5)

          2.应用一个素数定理:大于6的素数一定与6的倍数相邻,代码如下:
              '''
                print(2,3,end = ' ')
                 n = 100000
                 i = 5
           step = 2
                while i<= n:
                         for j in range(5,int(i**0.5)+1,2):
                                if j%j == 0:
                                    break
                            else:
                                    count += 1
                            i += step
                            step = 4 if step ==2 else 2
                                    '''
  1. 此算法的计算复杂度为(n/3052)(n0.5+1)/2(将总范围分成30为一块,则6的倍数有5个,相邻的数就是10个),空间复杂度同样为O(n1.5)

                     优化思路:
                     对于1号算法,我们知道末尾是5的数一定能被5整除,所以末位是5的数一定不是素数,j计算复杂度可以降为0.4*n*((n**0.5+1)*0.4)。不是偶数且末为不是5,就剩(1,3,7,9),所以4/10=0.4,第二层循环也是如此。优化效率提升56%(0.5**2/0.4**2-1=0.56)。
                     对于2号算法,思路也是刨去末位为5的数。例如,30~60这一块内,6的倍数有(36,42,48,54,60),相邻的数是(35,37,41,43,47,49,53,55,59,61),有两个末位是5的数(35,55),所以将总范围分成30为一块,只需计算8个数,优化后空间复杂度为(n/30*(5*2-2))*(n**0.5+1)*0.4=4/15*n*(n**0.5+1)*0.4。相比优化后的1号算法,优化后的2号算法效率提升50%(其余项约分,只剩0.4/(4/15),所以0.4/(4/15)-1=0.5)。
    
                    综上可见,降低算法复杂度是提高解决问题效率的不二法门。

相关内容

热门资讯

冰箱里面有水流声但是不制冷了是... 1、可能是因为压缩机出现故障。2、可能是是因为制冷系统当中已经没有了制冷剂所导致。3、可能是长时间使...
冰箱不制冷里面有水流声 1、有可能是温控器的档位没有调节到位,或者是温控器出现了故障,导致冰箱出现了不制冷的问题。2、冰箱有...
郑丽文访陆之旅遭绿营抹黑,国民... 海峡导报综合报道 中国国民党23日发布党主席郑丽文此前率团参访大陆的纪录片,遭到民进党批评抹黑。国民...
冰箱冷藏室不制冷有水流声怎么办 制冷剂缺乏引起冰箱不制冷:大部分双门电冰箱毛细管出口是先进到冷冻室开始循环,也就是说在冷冻室开始制冷...
冰箱内部有水流声不制冷是怎么回... 1、当冰箱内部如果听到有不断的流水声,这种现象是正常的,因为是制冷剂在管路里运行时产生的回音。2、通...
电热水器风压故障如何处理 电热水器作为家庭常用电器之一,其正常运行对于家庭生活有着至关重要的影响。然而在使用过程中,偶尔会遇到...
震惊!男子取款1万ATM机只吐...   男子取款1万ATM机只吐5千 银行回应  【男子取款1万ATM机只吐5千 银行回应】6月19日凌...
塔利班再掌权来首次,阿代表团访... 新华社北京6月24日电 欧盟官员与阿富汗政府代表团23日首次在欧盟总部所在地比利时布鲁塞尔会谈,讨论...
从沟通桥梁变交流壁垒!带头搞“... 近一段时间,台陆委会频繁登上新闻热搜,继主委邱垂正威胁查处台东县长饶庆铃和五家农渔团体后,副主委梁文...
气温稳步回升,28日北中部高温... 分散性阵雨、雷阵雨出没今起三天,由于高空槽活动频繁,我省将多分散性降水,大家外出记得带伞,驾车注意交...