王威 王德貴
一個(gè)三位“自冪數(shù)”就是這個(gè)三位數(shù)的每個(gè)數(shù)字的立方和與其本身相等,這樣的三位數(shù)也叫“水仙花數(shù)”;如果一個(gè)四位數(shù)的每一位的四次方和與其本身相等,這樣的四位數(shù)叫“玫瑰花數(shù)”;符合同樣規(guī)則的五位數(shù)叫“五角星數(shù)”;當(dāng)位數(shù)大于五位時(shí),符合一個(gè)n位自然數(shù)等于自身各個(gè)數(shù)位上數(shù)字的n次冪之和,則稱此數(shù)為“自冪數(shù)”。兩位數(shù)沒有自冪數(shù)。
前幾期文章,我們了解了數(shù)學(xué)黑洞,今天我們繼續(xù)用Python來分析和研究一類新的數(shù)學(xué)黑洞——自冪數(shù)。
前面幾篇數(shù)學(xué)黑洞問題,在研究時(shí)真的感到很有意思,還有些奇妙,這就更增添了學(xué)習(xí)的興趣。自冪數(shù)和“6174”等數(shù)學(xué)黑洞的規(guī)則不同,算法思路也就會(huì)有一些差異。
通過輸入一個(gè)數(shù)字,根據(jù)位數(shù)進(jìn)行枚舉計(jì)算,輸出滿足條件的數(shù)。
程序是將數(shù)值轉(zhuǎn)換為字符串,然后依次取出每個(gè)數(shù)字字符,進(jìn)行冪運(yùn)算,如果計(jì)算結(jié)果與本身相等,則滿足條件,輸出。
比如輸入一個(gè)三位數(shù),取出每個(gè)數(shù)字字符計(jì)算立方和,如果和本身相等,即是滿足條件的數(shù)值。
如果位數(shù)多了,其冪次用字符串長(zhǎng)度表示即可。即位數(shù)是利用10的冪次表示,比如10**2,即10的平方為100,是三位數(shù)。
程序涉及的是中國(guó)電子學(xué)會(huì)編程等級(jí)考試二級(jí)的內(nèi)容:for/range()。
我們不久前才介紹了while循環(huán),在條件為True時(shí),while循環(huán)會(huì)繼續(xù)循環(huán)。但如果你想讓一個(gè)代碼塊執(zhí)行固定的次數(shù)該怎么辦呢?答案是:可以通過for循環(huán)語句和range()函數(shù)來實(shí)現(xiàn)。
range()函數(shù)可以只設(shè)置終止值,range(stop),也可以設(shè)置三個(gè)參數(shù)range(start,stop[,step])。
start為開始值,開始值作為開始的那個(gè)數(shù),不輸入的話默認(rèn)從0開始。
stop為結(jié)束值,結(jié)束值所代表的不是結(jié)束的那個(gè)值,而是結(jié)束的那個(gè)下標(biāo),結(jié)束值的下標(biāo)是從0開始算起。例如你輸入5,那么輸出之后就是4。也就是我們說的左閉右開,結(jié)束值不可省略。
step為步進(jìn)值,步進(jìn)值代表一次你想要步進(jìn)多少個(gè),假如輸入1的話,那輸出之后就可以看到每一個(gè)數(shù)據(jù)之間相隔了1的差距,如果步進(jìn)值省略的話,它的默認(rèn)值依舊是1,只有當(dāng)你自己輸入其他的步進(jìn)值,它才會(huì)改變。
程序如圖1:
運(yùn)行結(jié)果發(fā)現(xiàn),水仙花數(shù)只有4個(gè):153、370、371、407(圖2)。
程序如圖3:
運(yùn)行結(jié)果發(fā)現(xiàn),玫瑰花數(shù)只有3個(gè):1634、8208、9474(圖4)。
程序如圖5:
運(yùn)行結(jié)果發(fā)現(xiàn),五角星數(shù)只有3個(gè):54748、92727、93084(圖6)。
程序如圖7:
運(yùn)行結(jié)果發(fā)現(xiàn),6位數(shù)的自冪數(shù)為:548834(圖8)。
可以看到繼續(xù)使用這種方式,在更高位時(shí)輸入容易出錯(cuò),所以我改用10的冪次,設(shè)定位數(shù)。程序修改如下(圖9)。
由運(yùn)算結(jié)果看,6位自冪數(shù)只有1個(gè),而7位自冪數(shù)有4個(gè)。這也證明我們的程序可以用來驗(yàn)證任意給定范圍內(nèi)的自冪數(shù)了(圖10)。
通過驗(yàn)證,大家對(duì)自冪數(shù)有了進(jìn)一步的理解,我們也做出了較為通用的程序,大家還可以繼續(xù)優(yōu)化程序,或是其他方法實(shí)現(xiàn)。根據(jù)這個(gè)算法也可以利用圖形化編程實(shí)現(xiàn),有興趣的讀者可以自行研究,本文不再贅述。
本文也是我自己的研究過程和心得,有不妥之處,請(qǐng)各位老師和同學(xué)斧正!