Easy Problem
∑ a 1 = 1 m ∑ a 2 = 1 m ∑ a 3 = 1 m ⋯ ∑ a n − 1 m ∑ a n m [ g c d ( a 1 , a 2 , a 3 , … , a n − 1 , a n ) = = d ] ( a 1 , a 2 , a 3 , … , a n − 1 , a n ) k = d k d ∑ a 1 = 1 m d ∑ a 2 = 1 m d ∑ a 3 = 1 m d ⋯ ∑ a n − 1 m d ∑ a n m d [ g c d ( a 1 , a 2 , a 3 , … , a n − 1 , a n ) = = 1 ] ( a 1 , a 2 , a 3 , … , a n − 1 , a n ) k = d k d ∑ i = 1 m d i k d μ ( i ) ∑ a 1 = 1 m i d ∑ a 2 = 1 m i d ∑ a 3 = 1 m i d ⋯ ∑ a n − 1 = 1 m i d ∑ a n = 1 m i d ( ∏ j = 1 n a i ) k 这 是 一 个 多 项 式 = d k d ∑ i = 1 m d i k d μ ( i ) ( ∑ j = 1 m i d i K ) n \sum_{a_1 = 1} ^{m} \sum_{a_2 = 1} ^{m} \sum_{a_3 = 1} ^{m} \dots \sum_{a_{n - 1}} ^{m}\sum_{a_n} ^{m} [gcd(a_1, a_2, a_3, \dots, a_{n - 1}, a_{n}) == d](a_1, a_2, a_3, \dots,a_{n - 1}, a_n) ^k\\ = d ^{kd} \sum_{a_1 = 1} ^{\frac{m}{d}} \sum_{a_2 = 1} ^{\frac{m}{d}} \sum_{a_3 = 1} ^{\frac{m}{d}} \dots \sum_{a_{n - 1}} ^{\frac{m}{d}}\sum_{a_n} ^{\frac{m}{d}} [gcd(a_1, a_2, a_3, \dots, a_{n - 1}, a_{n}) == 1](a_1, a_2, a_3, \dots,a_{n - 1}, a_n) ^k\\ =d ^{kd} \sum_{i = 1} ^{\frac{m}{d}}i ^{kd} \mu(i) \sum_{a_1 = 1} ^{\frac{m}{id}}\sum_{a_2 = 1} ^{\frac{m}{id}}\sum_{a_3 = 1} ^{\frac{m}{id}}\dots\sum_{a_{n - 1} = 1} ^{\frac{m}{id}}\sum_{a_{n} = 1} ^{\frac{m}{id}} (\prod_{j = 1} ^{n} a_i) ^k\\ 这是一个多项式\\ = d ^{kd} \sum_{i = 1} ^{\frac{m}{d}}i ^{kd} \mu(i) (\sum_{j = 1} ^{\frac{m}{id}}i ^K) ^n a1=1∑ma2=1∑ma3=1∑m⋯an−1∑man∑m[gcd(a1,a2,a3,…,an−1,an)==d](a1,a2,a3,…,an−1,an)k=dkda1=1∑dma2=1∑dma3=1∑dm⋯an−1∑dman∑dm[gcd(a1,a2,a3,…,an−1,an)==1](a1,a2,a3,…,an−1,an)k=dkdi=1∑dmikdμ(i)a1=1∑idma2=1∑idma3=1∑idm⋯an−1=1∑idman=1∑idm(j=1∏nai)k这是一个多项式=dkdi=1∑dmikdμ(i)(j=1∑idmiK)n
到这里这道题目就化简完成了,只需要通过简单的数列求和加欧拉降幂即可得到答案。
/*
Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
const int N = 1e5 + 10, mod = 59964251, phi = 59870352;
int mu[N], prime[N], cnt;
ll m, d, k, n, sum[N];
bool st[N];
char str[N];
ll quick_pow(ll a, int n, int mod = 59964251) {
ll ans = 1;
while(n) {
if(n & 1) ans = ans * a % mod;
a = a * a % mod;
n >>= 1;
}
return ans;
}
void init() {
memset(st, 0, sizeof st);
cnt = 0;
mu[1] = 1, sum[1] = 1;
for(int i = 2; i < N; i++) {
if(!st[i]) {
mu[i] = -1;
prime[cnt++] = i;
sum[i] = quick_pow(i, k);
}
for(int j = 0; j < cnt && i * prime[j] < N; j++) {
st[i * prime[j]] = 1;
sum[i * prime[j]] = sum[i] * sum[prime[j]] % mod;
if(i % prime[j] == 0) break;
mu[i * prime[j]] = -mu[i];
}
}
for(int i = 1; i < N; i++) {
sum[i] = (sum[i] + sum[i - 1]) % mod;
}
}
ll solve(ll m) {
ll ans = 0;
for(ll i = 1; i <= m; i++) {
ans = ans + 1ll * mu[i] * quick_pow(i, k * n % phi + phi) % mod * quick_pow(sum[m / i], n + phi) % mod;
}
return (ans % mod + mod) % mod;
}
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int T;
scanf("%d", &T);
while(T--) {
scanf("%s %lld %lld %lld\n", str + 1, &m, &d, &k);
init();
int len = strlen(str + 1);
n = 0;
for(int i = 1; i <= len; i++) {
n = n * 10 + str[i] - '0';
n %= phi;
}
ll ans = quick_pow(d, k * n % phi + phi) * solve(m / d) % mod;
printf("%lld\n", ans);
}
return 0;
}