n! 中质因数的指数(加证明过程) 质因数分解

提出问题:求阶乘的标准分解式中素因数的指数?
先说结论,定理如下:

在这里插入图片描述

简单证明
设 pow(p,k-1)<= n < pow(p,k)
有:
	m = p*t[1]+r[1]     (0<=r[1]<p)    (除法的基本原理,t[1] r[1] 中的[1]代表下标,下同) 
    t[1] = p*t[2]+r[2]  (0<=r[1]<p)
    ……
    t[k-2] = p*t[k-1]+r[k-1]    (0<=r[k-1]<p)
    t[k-1] = p*t[k]+r[k]        (0<=r[k]<p)
于是,在整数1到n之间,能被p整除的数有t[1]个,能被p平方整除的数有t[2]个,……能被p的k-1次方整除的数有t[k-1]个,
能被p的k次方整除的数为0个(由n的大小假设得知)
因此,在n!的标准分解中,素数p的指数,即p出现的次数为t[1]+t[2]+……+t[k-2]+t[k-1]+0(n除以p k遍之后没有商了,就结束求出结果来了!)
(在数学竞赛中是标准的素因数分解求法,而在OI中则要考虑时间复杂度和溢出问题,采用 除+取余的操作进行)
代码展示
int get_pow(int n,int p)
{ //求n!的标准分解式中,素因数p的指数(作为因数出现的次数) 
	int num = 0;
	while(n)
	{
		num+=n/p;  
		n/=p;
	}		
	return num;	
}

例题1: 给定一个正整数 p,求一个最小的正整数 n,使得 n! 是 p 的倍数(p<=10^9)

题解: 如果p不是素数,则将p进行质因数分解,求每一个因数的指数,然后二分查找n,看n!中是否包含这些所有的因数,且各自的指数大于等于在p中出现的指数,参见另一篇博客:https://blog.csdn.net/lgw999jyx/article/details/105037252

例题2: 求(1325)! 的末尾有多少个0?
在这里插入图片描述

参考文献

[1]王维余.阶乘的标准分解式中素因数的指数[J].赣南师范学院学报,1994(06):62-64.
[2]张光俊.质数p在正整数n中的最高指数[J].四川职业技术学院学报,2013,23(01):151-153.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值