#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新手。我的具體思路是,搞兩個(gè)txt文件分別儲(chǔ)存質(zhì)數(shù)庫(kù)和目前質(zhì)數(shù)庫(kù)的范圍。利用len()函數(shù)來判斷用戶輸入的數(shù)字是幾位數(shù),如果位數(shù)超過了數(shù)據(jù)庫(kù)的范圍,就自行更新數(shù)據(jù)庫(kù)。舉例:數(shù)據(jù)庫(kù)里面有2-10的所有質(zhì)數(shù),然后我現(xiàn)在輸入20,超出范圍,程序自行更新數(shù)據(jù)庫(kù)到2-100的所有質(zhì)數(shù),再運(yùn)算。這樣就避免了在沒有數(shù)據(jù)庫(kù)的情況下因?yàn)閿?shù)字太大運(yùn)算效率低(犧牲第一次的運(yùn)算效率來計(jì)算質(zhì)數(shù)庫(kù))。但是實(shí)際使用的時(shí)候,我發(fā)現(xiàn)我輸入100,然后程序開始自主更新數(shù)據(jù)庫(kù),但是更新出來的并不是2-100的所有質(zhì)數(shù),僅僅到了29。同理,在輸入很大的數(shù)字的時(shí)候,也只能更新到300多左右的質(zhì)數(shù),也就是說更新的不夠多,但是我檢查了很多遍代碼都沒搞明白問題出在哪里,。。*代碼中的注釋內(nèi)容基本解釋了所有的變量,方便大家看代碼。。。
自己用python寫了個(gè)分解質(zhì)因數(shù)腳本,但是總是出錯(cuò)怎么辦?
阿晨1998
2019-04-16 17:05:22