题目:
分析:
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