def?main(n,high):
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、主機(jī)域名、網(wǎng)絡(luò)空間、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
x=0
perfectnum=[]
while?n=high:
total=0
for?t?in?range(n//2,0,-1):
if?n%t==0:
total+=t
if?totaln?or?(totaln?and?t==1):
break
else:
x+=n
perfectnum.append("%d"%n)
n+=1
return?(perfectnum,x)
if?__name__=='__main__':
perfectnum,total=main(2,20000)
print("%s?=?%d"%('?+?'.join(perfectnum),total))
在你的這個(gè)思路中,可以優(yōu)化的主要就是幾方面:
1:求因數(shù)可以僅算到n的平方根q為止,對(duì)于n,每有一個(gè)小于q的因數(shù),就有一個(gè)對(duì)應(yīng)的大于q的因數(shù),兩者之積為n。
2:在完數(shù)函數(shù)中已經(jīng)完成了求因數(shù)的工作,不需要另做一次,直接在完數(shù)函數(shù)中拼裝結(jié)果即可。
3:目前來(lái)說(shuō),已知的完全數(shù)都是偶數(shù),因此,最后那行那里可以做num+=2優(yōu)化,但數(shù)學(xué)上目前還沒有證明不存在奇完全數(shù),這種做法從理論上來(lái)說(shuō)是不嚴(yán)謹(jǐn)?shù)摹?/p>
實(shí)際上,當(dāng)一個(gè)數(shù)比較大的時(shí)候,做因數(shù)分解是一個(gè)很費(fèi)時(shí)的工作,要找更大的完數(shù),需要更好的因數(shù)分解的方式。比如先求出所有的質(zhì)因數(shù),在使用這些質(zhì)因數(shù)的組合來(lái)尋找非質(zhì)因數(shù)。因?yàn)橘|(zhì)因數(shù)必然是在質(zhì)數(shù)表中,而質(zhì)數(shù)表可以建立一次然后重復(fù)使用,相對(duì)一個(gè)個(gè)的試商就快得多了。
如果要進(jìn)一步優(yōu)化以尋找更大的完全數(shù),那么,就需要利用更多的關(guān)于完全數(shù)的規(guī)律了,比如,除6以外,其它的完全數(shù)都是9n+1,都是p^2*q……,這些優(yōu)化在你這個(gè)框架下實(shí)現(xiàn)就比較麻煩。
總體來(lái)說(shuō),不解決因數(shù)分解的問(wèn)題,主要就是上述三種優(yōu)化了。
a=range(1,101)
b=range(1,101)
result=[]
for i in a:
tmp=[]
for k in b:
? if ki:
? ? ? if not i%k:
? ? ? ? ? tmp.append(k)
? ? ? else:
? ? ? ? ? continue
? else:
? ? ? break
count=0
for m in tmp:
? count=count+m
if count==i:
? result.append(i)
else:
? continue
print(result)
#?!/usr/bin/python27
#?coding:?utf8
'''
計(jì)算完美數(shù)(完全數(shù))
'''
for?n?in?range(1,1000):
nlist?=?[i?for?i?in?range(1,n)?if?n%i?==?0]
if?sum(nlist)?==?n:
print?''.join([str(n),'=','+'.join([str(n)?for?n?in?nlist])])
運(yùn)行結(jié)果:
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
或者這樣:
print?[n?for?n?in?range(1,1000)?if?sum([i?for?i?in?range(1,n)?if?n%i?==?0])?==?n]
結(jié)果:
[6,?28,?496]
如果一個(gè)數(shù)恰好等于它的真因子之和,則稱該數(shù)為“完全數(shù)”?[2]??。各個(gè)小于它的約數(shù)(真約數(shù),列出某數(shù)的約數(shù),去掉該數(shù)本身,剩下的就是它的真約數(shù))的和等于它本身的自然數(shù)叫做完全數(shù)(Perfect number),又稱完美數(shù)或完備數(shù)。
例如:第一個(gè)完全數(shù)是6,它有約數(shù)1、2、3、6,除去它本身6外,其余3個(gè)數(shù)相加,1+2+3=6。第二個(gè)完全數(shù)是28,它有約數(shù)1、2、4、7、14、28,除去它本身28外,其余5個(gè)數(shù)相加,1+2+4+7+14=28。第三個(gè)完全數(shù)是496,有約數(shù)1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9個(gè)數(shù)相加,1+2+4+8+16+31+62+124+248=496。后面的完全數(shù)還有8128、33550336等等。
結(jié)果是
網(wǎng)站題目:python函數(shù)求完數(shù) python中求完數(shù)
本文網(wǎng)址:http://jinyejixie.com/article0/dodhgoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)