比较水的DP
f[i]以不大于i为底的方案数之和
易知:f[i]=f[i-1]+f[n/k]
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1000000+10;
long long t,p,n,k,ans;
long long f[maxn];
int main()
{
scanf("%lld%lld",&t,&p);
while(t--)
{
memset(f,0,sizeof(f));
scanf("%lld%lld",&n,&k);
f[0]=f[1]=1;
for(long long i=2;i<=n/k;++i)
f[i]=(f[i-1]+f[i/k])%p;
long long nn=n;
for(ans=1;nn/=k;++ans);
printf("%lld %lld\n",f[n/k],ans%p);
}
return 0;
}