Python P2043 质因子分解

文章介绍了如何对N!进行质因子分解,提供了两种方法:普通方法和数学方法。普通方法通过循环和除法找出所有质因子及其出现次数;数学方法利用sqrt和log函数优化了计算过程。示例展示了当N=10时的质因子分解结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

对 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值