【py交易】算法竞赛入门经典5.4.2 因子和阶乘 Python
题目:
分析:
0.825除以2,除不尽(共0次);除以3,能除尽,再除以3,除不尽(共1次);除以5,能除尽,再除以5,能除尽,再除以5,除不尽(共2次)。。。所以为01201
1.输入一个数,计算这个数的阶乘,需要一个计算阶乘的函数:factorial,用到了递归
2.需要一个素数集,用isPrime函数
3.要用到键值对的存储结构,py可以用字典类存储,声明方法是 dick = {},key是素数,value是被除次数,初始的value是0
4.遍历每一个素数,用输入数的阶乘除以这个素数,能除尽,这个素数key对应的value加1,直到不能除尽
5.需要一个记录能被某某阶乘除尽的最大素数,以便去掉高位没用的0
6.py居然不能用 index++,只能用index +=1 or index = index+1
# coding=utf-8
import math"判断一个数是否是素数"
"@param n 需要判断的数"
"@return 0不是素数 1是素数"def isPrime(n):isOk = 1#是素数for i in range(2,int(math.sqrt(n))+1,1):# print i# print n%iif n % i == 0:isOk= 0#不是素数breakreturn isOk"求一个数的阶乘"
"@param n 需要计算的数"
"@return 阶乘的结果"
def facrorial(n):if n == 1:return 1return n * facrorial(n-1)n = raw_input("")#输入的数number = facrorial(int(n))#计算输入数字的阶乘"构建质数字典,2~100的质数"index = 0
primeArr = {}
for i in range(2,101,1):if isPrime(i):primeArr[i] = 0index += 1"遍历100以内的质数,能被数字整除的就是因子,继续除下去,直到不能除尽,记录除的次数"maxFactor = 0 #记录最大的质数,用于省略不必要的0
for item in primeArr:isOk = 0while number % item == 0:#能够除尽,说明是n的因子primeArr[item] += 1number = number / itemisOk = 1if isOk and primeArr[item] != 0:maxFactor = itemresult = ''#结果
for item in primeArr:# print item,'=>',primeArr[item]result = result + " "+str(primeArr[item])if item >= maxFactor:break
print n,"! =",result
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
