题目大意

即求

$$ S (n) = \sum^n_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k f (\gcd \{ a_x \}) \gcd \{ a_x \} $$

我自己随便简写了,全打太麻烦了。

分析

这东西看着很吓人,其实是纸老虎。首先 $f(x) = \mu(x)^2$。提出 $\gcd$ 有

$$ \begin{aligned} S (n) & =\sum_{d=1}^{n}\sum^{n}_{\{ a_{x}\}=1}(\prod_{j=1}^{x}a_{j})^{k}{\mu}(d)^{2}d [gcd \{ a_{x}\} =d]\\ & =\sum_{d=1}^{n}{\mu}(d)^{2}d^{k x+1}\sum^{n/d}_{\{ a_{x}\} =1}(\prod_{j=1}^{x}a_{j})^{k}[gcd \{ a_{x}\} =1] \end{aligned} $$

对后面这部分反演有

$$ \begin{aligned} & \sum^{n / d}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k \left( \sum_{t \mid \gcd \{ a_x \}} \mu (t) \right)\\ = & \sum^{n / d}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k \left( \sum_{t = 1}^{n / d} [t \mid \gcd \{ a_x \}] \mu (t) \right)\\ = & \sum_{t = 1}^{n / d} \mu (t) t^{k x} \sum^{n / d t}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k \end{aligned} $$

代回去,枚举 $T = d t$

$$ \begin{aligned} S (n) & = \sum_{d = 1}^n d \mu (d)^2 (d t)^{k x} \sum_{t = 1}^{n / d} \mu (t) \sum^{n / d t}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k\\ & = \sum_{T = 1}^n \sum_{d \mid T} d \mu (d)^2 T^{k x} \mu \left(\frac{T}{d} \right) \sum^{n / T}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k\\ & = \sum_{T = 1}^n T^{k x} \left( \sum^{n / T}_{\{ a_x \} = 1} \left( \prod_{j = 1}^x a_j \right)^k \right) \sum_{d \mid T} d \mu (d)^2 \mu \left( \frac{T}{d} \right)\\ & = \sum_{T = 1}^n T^{k x} \left( \sum^{n / T}_{i = 1} i^k \right)^x \sum_{d \mid T} d \mu (d)^2 \mu \left( \frac{T}{d} \right) \end{aligned} $$

到这里已经差不多化完了。令

$$ G (x) = \sum^x_{i = 1} i^k, H (x) = \sum_{d \mid x} d \mu (d)^2 \mu \left( \frac{x}{d} \right) $$

其中 $G (x)$ 显然可以预处理,而 $H (x)$ 是积性函数的卷积,故也是积性函数,其中

$$ H (p^c) = \begin{cases} p - 1,& c = 1\\ -p, & c = 2 \\ 0, & c > 2 \end{cases} $$

可以线性筛得到。

const ll maxn = 2e5 + 86;
const ll mod = 1e9 + 7;
#define ACM_MOD mod

bool notp[maxn + 10];
int prime[maxn/10 + 10], cnt;
ll hh[maxn + 10];
void sieve(int n) {
	hh[1] = 1;
	for (int i = 2; i <= n; i++) {
		if (!notp[i]) {
			prime[++cnt] = i;
			hh[i] = i - 1;
		}
		int t = n / i;
		for (int j = 1; j <= cnt;j++) {
			int pj = prime[j], ti = i * pj;
			if (pj > t)
				break;
			notp[ti] = true;
			if (i % pj == 0) {
				int tj = i / pj;
				if (tj % pj != 0) {
					hh[ti] = hh[tj] * (mod - pj) % mod;
				} else {
					hh[ti] = 0;
				}
				break;
			}
			hh[ti] = hh[i] * hh[pj] % mod;
		}
	}
}

总之

$$ S (n) = \sum_{T = 1}^n T^{k x} H (T) G \left( \left\lfloor \frac{n}{T} \right\rfloor \right)^x $$

可以用整数分块。

#include "template/basic/qpow.hpp"

ll gg[maxn + 10];

void pre(ll k, ll x) {
	sieve(maxn);
	for (ll i = 1; i <= maxn; i++) {
		gg[i] = (gg[i - 1] + qpow(i, k)) % mod;
	}
	for (ll i = 1; i <= maxn; i++) {
		hh[i] = (hh[i - 1] + qpow(i, k * x % (mod - 1)) * hh[i]) % mod;
		gg[i] = qpow(gg[i], x);
	}
}

int main() {
	ll ttt = rr(), k = rr(), x = rr();
	pre(k, x);
	while(ttt--) {
		ll n = rr();
		ll ans = 0;
		for (ll l = 1, r; l <= n; l = r + 1) {
			r = n / (n / l);
			ll tsum = hh[r] - hh[l - 1] + mod;
			tsum = tsum * gg[n / l] % mod;
			ans = ans + tsum;
		}
		printf("%lld\n", ans % mod);
	}
	return 0;
}