链接:https://www.nowcoder.com/acm/contest/197/A
来源:牛客网
题目:
令 X = n!, 给定一大于1的正整数p 求一个k使得 p ^k | X 并且 p ^(k + 1) 不是X的因子。
题意:
求一个K值使得p^k 是 n! 的因子,而p^(k+1)不是 n! 的因子。即求n!里最多有多少个p。
题解:
根据质因子唯一分解定理:p = p1^a1 * p2^a2 * p3^a3 *......*pn^an,所以只需观察n!里有多少个p的质因子,对每个质因子的数量取个最小值。
那怎么求 n!里有多少个质因子p呢?
n! = 1*2*3*……*(n-2)*(n-1)*n
可以表示成所有和 p 倍数有关的乘积再乘以其他和p没有关系的
=(p*2p*3p*......*kp)*m, m是不含p因子的数的乘积因为 kp<=n,而k肯定是最大值,所以k=n/p;
=p^k*(1*2*......*k)*m
=p^k*k!*m
从这个表达式中可以提取出k个p,然后按照相同的方法循环下去可以求出k!中因子p的个数。
每次求出p的个数的和就是n!中质因子p的总个数。
代码如下:
#include<iostream>
#include<cmat