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];
		}
	}

  

posted @ 2019-09-30 08:28  ZSsst  阅读(179)  评论(0编辑  收藏  举报