Codeforces Round #589 (Div. 2) - C
题目大意:$prime(x)$ 代表 $x$ 的质因数的集合。
$g(x, p)$ 代表 $p^k$ 的最大值, $k$ 为整数,并且 $x$ 可以被 $p^k$ 整除。
$f(x, p)$ 代表 对于 $prime(x)$ 中的每一个 $x$ 的 $g(x, p)$ 值。
现在给定 $x, n$ 求 $f(x, 1) * f(x, 2) * ... *f(x, n) mod (10^9 + 7)$ 的值。
思路:对于 $x$ 进行质因数分解,分别考虑每一个 $prime(x)$ 对答案做出的贡献,假设目前的质因数为 $p_i$ , 那么 $n$ 个数中有 $n / p_i$ 个数可以被 $p_i$ 整除,之后考虑 $p_i ^ 2$ 的情况,如果小于 $n$ 则他对答案有贡献,根据上面可知有 $n / p_i^2$ 个数字可以被 $p_i^2$ 整除,但是这两个里面有重复的数字, 需要去掉.
for(int i = 1; i <= m; ++i) { ll t = n; while(t / p[i] != 0) { ll num = t / p[i]; ans = ans * pow_mod(p[i], num, MOD) % MOD; t /= p[i]; } }