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))