Python3.9,寻找质数,埃拉托色尼算法

埃拉托色尼算法
输入一个数,寻找这个数字以内的所有质数,并写入“e:\prime.txt”

注意:需要先在E盘,新建一个prime.txt,里面先写上2,3,5,7,作为种子质数(输入7后,要另起一行)

如图:
在这里插入图片描述

算法用的是开根号后,检查小于该数的质数是否能整除
优点:基本属于遍历,不存在欺骗数
缺点:复杂度极高,O(nlog(log(n))),所以速度很慢

def read():
    f=open("e:\prime.txt","r")
    buff=f.readlines()
    f.close()
    primearr=[]
    for i in range(len(buff)):            
        s=buff[i]
        buff[i]=s[0:-1]
        if str(buff[i]).isdigit()==1:
            primearr.append(buff[i])
    return primearr

def write(num):
    f=open("e:\prime.txt","a")
    f.writelines(str(num)+"\n")
    f.close()


def isprime(startnum,endnum,primearr):#主体算法#
    snum=startnum
    enum=endnum
    arr=primearr
    key=snum
    while key<=enum:
        sqrt_key=int(math.sqrt(key))#开根号后遍历prime.txt内的小于sqrt(key)的所有质数#
        for j in range(1,len(primearr)):
            if key%int(arr[j])==0:
                break
            if int(arr[j])>sqrt_key:
                return key
        key+=2
    key=-1
    return key


import math 
primearr=read()
startnum=int(primearr[-1])
#lens=len(primearr)
s=str(input("在文件中显示多少以内的质数?(文件中已经存在小于等于"+primearr[-1]+"的质数)"))
while s.isdigit()==0:
    s=str(input("输入错误,重新输入在文件中显示多少以内的质数?(文件中已经存在小于等于"+primearr[-1]+"的质数)"))
endnum=int(s)
if endnum<=startnum+1:
    print("文件中寻找即可")
else:
    if endnum%2==0:
        endnum-=1
    key=isprime(startnum+2,endnum,primearr)#从文本最后一个数+2开始,到输入数字为止#
    while key<=endnum and key>=0:
        print(str(key))
        write(key)
        arr=read()
        key=isprime(key+2,endnum,arr)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值