【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%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 = 0
primeArr = {}
for i in range(2,101,1):
    if isPrime(i):
        primeArr[i] = 0
        index += 1

"遍历100以内的质数,能被数字整除的就是因子,继续除下去,直到不能除尽,记录除的次数"

maxFactor =  0 #记录最大的质数,用于省略不必要的0
for 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 = item


result = ''#结果
for item in primeArr:
    # print item,'=>',primeArr[item]
    result = result + " "+str(primeArr[item])
    if item >= maxFactor:
        break
print  n,"! =",result
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值