#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
#define rep(i,j,k) for(i=j;i<=k;++i)
#define per(i,j,k) for(i=j;i>=k;--i)
#define ll long long
#define us unsigned short
#define db double
#define ldb long double
#define pii pair<int,int>
#define mkp make_pair
#define X first
#define Y second
const ll N=100000,MOD=1000003;
ll n,k,pri[N+1],cnt,mu[N+1],vis[N+1],f,jc[MOD],inv[MOD];
ll C(ll x,ll y){
if(x<y)return 0;
return jc[x]*inv[y]%MOD*inv[x-y]%MOD;
}
ll lu(ll x,ll y){
ll rtn=1,i,j;
while(x||y){
rtn=rtn*C(x%MOD,y%MOD)%MOD;
x/=MOD,y/=MOD;
}
return rtn;
}
ll g(ll x){
return lu(k+n/x-1,n/x-1);
}
int main(){
ll _,i,j,y;
jc[0]=jc[1]=inv[0]=inv[1]=mu[1]=1;
rep(i,2,MOD-1)inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
rep(i,2,MOD-1)jc[i]=jc[i-1]*i%MOD,inv[i]=inv[i-1]*inv[i]%MOD;
rep(i,2,N){
if(!vis[i])vis[pri[++cnt]=i]=1,mu[i]=-1;
for(j=1;j<=cnt&&(y=pri[j]*i)<=N;++j){
vis[y]=1;
if(i%pri[j]==0){
mu[y]=0;break;
}
mu[y]=-mu[i];
}
}
for(scanf("%lld",&_);_--;){
scanf("%lld%lld",&n,&k);f=0;
rep(i,1,n)f=(f+g(i)*mu[i])%MOD;
if(f<0)f+=MOD;
printf("%lld\n",f);
}
return 0;
}
#203. Koishi Loves Dynamic Programming
最新推荐文章于 2021-04-06 14:46:42 发布