博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Python核心编程》第二版第209页第八章练习 续一 -Python核心编程答案-自己做的-...
阅读量:5135 次
发布时间:2019-06-13

本文共 2134 字,大约阅读时间需要 7 分钟。

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))

转载于:https://www.cnblogs.com/balian/archive/2012/01/11/2318679.html

你可能感兴趣的文章
ZPL语言完成条形码的打印
查看>>
这20件事千万不要对自己做!
查看>>
Linux环境下Redis安装和常见问题的解决
查看>>
玩转小程序之文件读写
查看>>
HashPump用法
查看>>
cuda基础
查看>>
virutalenv一次行安装多个requirements里的文件
查看>>
Vue安装准备工作
查看>>
.NET 母版页 讲解
查看>>
Android Bitmap 和 Canvas详解
查看>>
最大权闭合子图
查看>>
oracle 创建暂时表
查看>>
201421410014蒋佳奇
查看>>
导入导出数据库和导入导出数据库表
查看>>
linux下操作mysql
查看>>
【03月04日】A股滚动市盈率PE历史新低排名
查看>>
Xcode5和ObjC新特性
查看>>
jvm slot复用
查看>>
高并发系统数据库设计
查看>>
LibSVM for Python 使用
查看>>