勒让德定理是用来求n!的素因子分解的一个定理,表述为:
记素数p的指数为Lp, Lp(n!)=∑[n/pk] (k>=1) .维基百科有详细的证明
一个要用到该定理的问题:uvalive 5828
求一个最大的数d,满足:
1.能分解成不同的因子,这些因子不能超过n;
2.是一个完全平方数.
输入n输出d% 1000000007
分析:
为满足完全平方数只需素分解后所有素数p的指数是偶数,因此这个最容易满足的条件我们放在最后考虑;
为了满足第一个条件,而且使d最大,极端情况就是n!了,显然这种情况下我们无法再乘入任何一个数t,使得
t*n!仍然满足条件1,然后根据勒让德定理得到n!的素分解,把素数中不为偶数的次数-1,就可以满足条件2了.
证明:
要证明这样做的正确性,只要证明它满足了条件1且无法再乘入新的数了.
1.证明能分解成不同的因子,且它们小于n:
即证被除去的数的积F能分解成不同的因子且它们都小于n,
因为前面为保证指数为偶数,除去的素数的指数都为1,所以
F=f1*f2...*fk ,f都为小于n的素数,于是n!/F后相当于在阶乘时跳过了
一些素数,当然此时仍有不相同因子的分解.
2.无法再乘入新的数:
首先证明乘入的数只能是F素分解的组合:若为F素分解以外的数它的位置必定已经被2~n
中的数占领了,于是产生重复.而如果为F素分解中的数,就无法满足每个指数都为偶数的条件.