标签:
#include <iostream> #include <cstring> #include <cstdlib> #include <algorithm> #include <string> #include <map> #include <cmath> #include <math.h> #include <cstdio> #define LL long long using namespace std; const int MAXN = 1000000 + 10; const int MOD = 998244353; LL pow_mod(LL a, LL b) { LL res = 1; while(b) { if(b & 1) res = res * a % MOD; a = a * a % MOD; b >>= 1; } return res; } int A[MAXN], B[MAXN]; int dp[MAXN]; int main() { int T; scanf("%d", &T); while(T--) { int n, k; memset(B, 0, sizeof(B)); int Max = 0; scanf("%d%d", &n, &k); for(int i=1;i<=n;i++) { scanf("%d", &A[i]); B[A[i]]++; Max = max(Max, A[i]); } memset(dp, 0, sizeof(dp)); LL ans = 0; for(int i=Max;i>=1;i--) { int c = 0; for(int j=i;j<=Max;j+=i) { c += B[j]; if(j > i) dp[i] = (dp[i] - dp[j] + MOD) % MOD; } dp[i] = (dp[i] + pow_mod(2, c) - 1 + MOD) % MOD; ans = (ans + pow_mod(i, k) * dp[i]) % MOD; } printf("%lld\n", ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/moguxiaozhe/article/details/45101009