题目描述
对 N! 进行质因子分解。
输入格式
输入数据仅有一行包含一个正整数 N,N≤10000。
输出格式
输出数据包含若干行,每行两个正整数 p,a,中间用一个空格隔开。表示 N! 包含 a 个质因子 p,要求按 p 的值从小到大输出。
输入输出样例
输入 #1
10
输出 #1
2 8 3 4 5 2 7 1
说明/提示
10!=3628800=(28)×(34)×(52)×7。
普通方法:
m = int(input())
dic = {}
for i in range(2,m+1):
ii = i
for j in range(2,i+1):
while ii%j == 0:
if j in dic:
dic[j] += 1
else:
dic[j] = 1
ii /= j
for i,j in dic.items():
print(i,j)
数学方法:
import math
m = int(input())
def fun(x):
for i in range(2,int(math.sqrt(x))+1):
if x%i == 0:
return 0
return x
def zero(x):
if x != 0:
return x
s = map(fun ,list(range(2,10000)))
# print(list(s))
ss = list(filter(zero,list(s)))
for i in ss:
if i > m:
break
else:
sum = 0
k = math.floor(math.log(m,i)+1)
for j in range(1,k):
sum += m//math.pow(i,j)
print(i,int(sum))