zoukankan      html  css  js  c++  java
  • 《Python核心编程》第二版第209页第八章练习 续一 Python核心编程答案自己做的

    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 switch
    
    def 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 ... 197
    You 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 factorList
    
    def 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 k
    
    number = raw_input("Please input your number ... ")
    print factorial(int(number))
    
  • 相关阅读:
    ASP.NE网站发布注意事项
    jQuery中使用$.ajax提交表单
    DataTable类Clone及Copy方法的区别
    DataList控件使用初步
    一个非常标准的Java连接Oracle数据库的示例代码
    详细解析用C#写的小游戏《彩色连珠》(附源代码)
    VS 2010 复制代码到word出现乱码解决办法
    Java之简单的图片动态显示(实现类似GIF动画效果)
    Class.forName(String driverClassName)加载JDBC驱动程序时,底层都做了些什么???
    Java设计好看的窗体必加的代码(使用内置皮肤控件):
  • 原文地址:https://www.cnblogs.com/balian/p/2318679.html
Copyright © 2011-2022 走看看