《Python核心編程》第二版第209頁第八章練習 續一 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

8-6.素因子分解。以剛才練習中的isprime()和getfactors()函數為基礎編寫一個函數,它接受一個整型作為參數,返回該整型所有素數因子的列表。這個過程叫做求素因子分解,它輸出的所有因子之積應該是原來的數字。注意列表裡可能有重複的元素。例如輸入20,返回的結果應該是[2,2,5]。
【答案】
代碼如下:

def isprime(number):    switch = True    if number <= 1: switch = False     for i in range(2, number / 2 + 1):        if number % i == 0: switch = False    return switchdef getfactors(number):    factorList = []    for i in range(1, number + 1):        if number % i == 0 and isprime(i):             factorList.append(i)    return factorList    def findPrimeFactors(number):    temp = getfactors(number)    k = 1    for i in temp: k = k * i    if k == number: return temp    else:        j = number / k        return temp + findPrimeFactors(j)    number = int(raw_input("Please input your number ... ")) if isprime(number): print "You have already input a prime number."else:    factors = findPrimeFactors(int(number))    factors.sort()    print factors
   
【執行結果】
Please input your number ... 199876[2, 2, 107, 467]Please input your number ... 7099092[2, 2, 3, 3, 7, 11, 13, 197]Please input your number ... 197You have already input a prime number.Please input your number ... 20[2, 2, 5]

【未完】
在函數findPrimeFactors()中使用了遞迴。程式在處理很大的數,比如25200000,消耗的時間會比較長,效率不高。這時可以把函數isprime()和函數getfactors()裡面的range替換成xrange,會有一些改善。

 

8-7.完全數。完全數被定義為這樣的數字:它的約數(不包括它自己)之和為它本身。例如:6的約數是1,2,3,因為1+2+3=6,所以6被認為是一個完全數。編寫一個名為isperfect()的函數,它接受一個整形作為參數,如果這個數字是完全數,返回1:否者返回0。
【答案】
代碼如下:

def getfactors(number):    factorList = []    for i in range(1, number):        if number % i == 0: factorList.append(i)    return factorListdef isperfect(number):    if sum(getfactors(number)) == number: return True    else: return False    number = raw_input("Please input your number ... ")print number, getfactors(int(number)), isperfect(int(number))

8-8.階乘。一個數的階乘被定義為從1到該數字所有數位乘積。N的階層簡寫為N!。N! = factorial(N) = 1*2*3* ... *(N-2)*(N-1)*N。所以4! = 1*2*3*4。寫一個函數,指定N,返回N!的值。
【答案】
代碼如下:

def factorial(number):    k = 1    for i in range(1, number+1): k = k*i    return knumber = raw_input("Please input your number ... ")print factorial(int(number))
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.