#Num(originalnumber);Lg(lengthoforiginalnumber);Lf(lengthfile);#Pl(primeslist);Pf(primefile);Ps(primes);d(listofanswers);#length(opentxtfile'length');Pb(opentxtfile'primebase');Qpt()Num=raw_input('Pleaseinputanumber!\nNumber:')Lg=len(Num)length=open('length.txt','r+')Lf=length.readlines()Pb=open('primebase.txt','r+')Pl=Pb.readlines()ifint(Lg)>int(Lf[0]):print'Noenoughprimesindatabase!\nUpdatingthedatabase...'foriinrange(int(Lf[0])*10,int(Lg)*10):Qpt=0forxinrange(2,int(i*0.5)+1):ifi%x==0:Qpt+=1ifQpt!=0:breakifQpt==0andi!=0andi!=1:Pl.append('%s\n'%str(i))Pf=open('primebase.txt','w+')Pf.writelines(Pl)Pf.close()Lf[0]=str(Lg)file=open('length.txt','w+')file.writelines(Lf)file.close()print'Finishupdatingdatabase!'d=[]Num=int(Num)whileNum!=1:foriinPl:i=int(i)ifNum%i==0:Num=Num/id.append(i)ifd==[]:print'Primenumber!'else:print'Primefactors:'foriind:printielse:d=[]Num=int(Num)whileNum!=1:foriinPl:i=int(i)ifNum%i==0:Num=Num/id.append(i)ifd==[]:print'Primenumber!'else:print'Primefactors:'foriind:printi本人py新手。我的具体思路是,搞两个txt文件分别储存质数库和目前质数库的范围。利用len()函数来判断用户输入的数字是几位数,如果位数超过了数据库的范围,就自行更新数据库。举例:数据库里面有2-10的所有质数,然后我现在输入20,超出范围,程序自行更新数据库到2-100的所有质数,再运算。这样就避免了在没有数据库的情况下因为数字太大运算效率低(牺牲第一次的运算效率来计算质数库)。但是实际使用的时候,我发现我输入100,然后程序开始自主更新数据库,但是更新出来的并不是2-100的所有质数,仅仅到了29。同理,在输入很大的数字的时候,也只能更新到300多左右的质数,也就是说更新的不够多,但是我检查了很多遍代码都没搞明白问题出在哪里,。。*代码中的注释内容基本解释了所有的变量,方便大家看代码。。。
大话西游666
HUWWW
相关分类