Python3.0实现输出规定数字以内质数到文件,文件内质数可以一直增加,同时根据文件内质数集合,进行数字的因式分解

本博客介绍了一个使用Python3.0编写的程序,该程序能够生成并保存指定范围内的所有质数到文件中,并能在此基础上进行连续计算。此外,程序还具备根据已保存的质数集合进行整数因式分解的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3.0实现输出规定数字以内质数到文件,并保存,再次开启程序,会读出文件内质数,并向更大的数字计算
注意:
1、开启程序前,现在E盘根目录下建立prime.txt
2、在prime.txt文件内分3行写下2、3两个起始质数,各占据一行,前面不能有空格
3、数字3输入完毕后,要键入回车,保持3(也就是最后一个数字)下面还有空行,几个空行无所谓
4、不要输入质数以外的任何字符

以下是生成并继续计算质数

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))
        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])
s=str(input("在文件中显示多少以内的质数?(文件中已经存在小于等于"+primearr[-1]+"的质数)"))
while s.isdigit()==0:
    s=str(input("输入错误,重新输入在文件中显示多少以内的质数?(文件中已经存在小于等于"+primearr[-1]+"的质数)"))
endnum=int(s)
if endnum<=startnum:
    print("文件中寻找即可")
else:
    if endnum%2==0:
        endnum-=1
    key=isprime(startnum+2,endnum,primearr)
    while key<=endnum-2 and key>=0:
        print(str(key))
        write(key)
        arr=read()
        key=isprime(key+2,endnum,arr)

以下是根据文件内质数集合,进行因式分解

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 factor(key,arr):
    for i in range(len(arr)):
        if int(arr[i])**2<=key:
            if key%int(arr[i])==0:
                return int(arr[i])
        else:
            break
    return 1
            

import math 
primearr=read()
num=int(primearr[-1])
resultarr=[]
s=str(input("输入需要因式分解的整数:(大于1,小于等于"+str(int(primearr[-1])**2)+")"))
while s.isdigit()==0:
    s=str(input("输入错误,输入需要因式分解的整数:(大于1,小于等于"+str(int(primearr[-1])**2)+")"))
while int(s)>int(primearr[-1])**2:
    s=str(input("数字过大,重新输入需要因式分解的整数:(大于1,小于等于"+str(int(primearr[-1])**2)+")"))
while int(s)<2:
    s=str(input("数字过小,重新输入需要因式分解的整数:(大于1,小于等于"+str(int(primearr[-1])**2)+")"))
num=int(s)
if primearr.count(str(num))>0 or factor(num,primearr)==1:
    print("这是一个质数")
else:
    result=factor(num,primearr)
    print(result)
    resultarr.append(result)
    while primearr.count(str(int(num/result)))<1:
        num=int(num/result)
        result=factor(num,primearr)
        if result==1:
            break
        else:
            resultarr.append(result)
            print(result)
    resultarr.append(int(num/result))
    print(int(num/result))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值