#include #include using namespace std; int mm=1e6; int kk=10; using mint=atcoder::modint998244353; vector> a; vector> sa; template< typename T > vector< pair< pair< T, T >, T > > quotient_range(T N) { T M; vector< pair< pair< T, T >, T > > ret; for(M = 1; M * M <= N; M++) { ret.emplace_back(make_pair(M, M), N / M); } for(T i = M; i >= 1; i--) { T L = N / (i + 1) + 1; T R = N / i; if(L <= R && ret.back().first.second < L) ret.emplace_back(make_pair(L, R), N / L); } return ret; } void f(int k){ vector dp(mm+1); for (int i=1;i<=mm;i++){ dp[i]+=mint(i).pow(k); for (int j=i*2;j<=mm;j+=i){ dp[j]-=dp[i]; } } a[k]=dp; for (int i=1;i<=mm;i++) sa[k][i]=sa[k][i-1]+dp[i]; } void solve(){ int n,m,k; cin>>n>>m>>k; auto vp=quotient_range(m); mint ans=0; for (auto [p,q]:vp){ auto [l,r]=p; ans+=(sa[k][r]-sa[k][l-1])*mint(q).pow(n); } cout<(mm+1)); sa=vector(kk+1,vector(mm+1)); for (int k=1;k<=kk;k++) f(k); int t=1; cin>>t; while (t--) solve(); }