【py交易】算法竞赛入门经典5.4.2 因子和阶乘 Python

来源:互联网 发布:淘宝网页设计教程 编辑:程序博客网 时间:2024/06/11 08:47

题目:
这里写图片描述
这里写图片描述
分析:

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-8import 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%i        if n % i == 0:             isOk= 0#不是素数             break    return isOk"求一个数的阶乘""@param n 需要计算的数""@return 阶乘的结果"def facrorial(n):    if n == 1:        return 1    return n * facrorial(n-1)n = raw_input("")#输入的数number = facrorial(int(n))#计算输入数字的阶乘"构建质数字典,2~100的质数"index = 0primeArr = {}for i in range(2,101,1):    if isPrime(i):        primeArr[i] = 0        index += 1"遍历100以内的质数,能被数字整除的就是因子,继续除下去,直到不能除尽,记录除的次数"maxFactor =  0 #记录最大的质数,用于省略不必要的0for item in primeArr:    isOk = 0    while  number % item == 0:#能够除尽,说明是n的因子        primeArr[item] += 1        number = number / item        isOk = 1    if isOk and primeArr[item] != 0:        maxFactor = itemresult = ''#结果for item in primeArr:    # print item,'=>',primeArr[item]    result = result + " "+str(primeArr[item])    if item >= maxFactor:        breakprint  n,"! =",result
1 0
原创粉丝点击