/*
1~1e6的 素数个数 约 等于 1e6/ lg1e6 =78498 ,
直接对区间内每个数作因数 分析会超时,
那可以枚举 质因数,再类似于 筛法,累计每个数 当前的因数和
*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int mod =998244353;
const int Size = 1e6+105;
int vis[Size],e[Size],cnt=0;
int ans[Size];
ll as[Size];
void prime()
{
int q=1e6+3;
for(int i=2;i<q;i++)
if(!vis[i])
{
e[++cnt]=i;
for(int j=i+i;j<q; j += i) vis[j]=1;
}
}
int main()
{
memset(vis,0,sizeof(vis));
prime();
int k,t;
scanf("%d",&t);
ll l,r;
while(t--)
{
scanf("%lld%lld%d",&l,&r,&k);
for(int i=1;i<=r-l+1;i++)
{
ans[i]=1;
as[i]=l-1+i;
}
for(int i=1;i<=cnt&&e[i]<=r;i++)
{
ll x = l/e[i];
ll p = (ll)x*e[i];
if(p<l)
{
p +=e[i];
}
for(;p<=r;p +=e[i])
{
ll nb=p;
int xx=0;
int pos=p-l+1;
while(nb%e[i]==0)
{
xx++;
nb /=e[i];
as[pos] /=e[i];
}
ll nn=ans[pos]; nn *=(xx*k+1)%mod; nn %=mod;
ans[pos] =nn;
}
}
ll ansans=0;
for(int i=1;i<=r-l+1;i++)
{
if(as[i]!=1)
{
ll nn=(k+1); nn *=ans[i]; nn %=mod;
ans[i] =nn;
}
ansans +=ans[i];
ansans %=mod;
}
printf("%lld\n",ansans);
}
return 0;
}
07-31
07-31
07-31