#203. Koishi Loves Dynamic Programming

来源:互联网 发布:查重软件是什么 编辑:程序博客网 时间:2024/06/08 17:59
#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 secondconst 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;}


0 0
原创粉丝点击