2024-10-12 11:29:37 +00:00
|
|
|
#include <iostream>
|
|
|
|
#include <algorithm>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
using ull = unsigned long long;
|
|
|
|
#define NV(v)#v<<" : "<<(v)
|
|
|
|
|
|
|
|
static ull t, k, n, m, ans;
|
|
|
|
static std::map<ull,ull> fact_map;
|
|
|
|
static std::map<std::pair<ull,ull>,ull> C_map;
|
|
|
|
|
|
|
|
static ull fact(const ull n)noexcept{
|
|
|
|
if(n==0)return 1;
|
|
|
|
const auto it = fact_map.find(n);
|
|
|
|
if(it != fact_map.end())return (*it).second;
|
|
|
|
ull ret {1};
|
|
|
|
for(ull i{2};i<=n;i++){
|
|
|
|
ret*=i;
|
|
|
|
}
|
|
|
|
fact_map.insert({n,ret});
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
static ull C(const ull n, const ull m)noexcept{
|
|
|
|
const auto it = C_map.find({n,m});
|
|
|
|
if(it!=C_map.end())return (*it).second;
|
|
|
|
const ull ret = (fact(n))/(fact(m)*fact(n-m));
|
|
|
|
C_map.insert({{n,m},ret});
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
int main(){
|
|
|
|
// std::cout<<NV(fact(0))<<'\n'<<NV(fact(3))<<'\n';
|
|
|
|
std::iostream::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
|
|
|
|
std::cin>>t>>k;
|
|
|
|
|
|
|
|
for(ull i {0};i<t;i++){
|
|
|
|
std::cin>>n>>m;
|
|
|
|
ans = 0;
|
|
|
|
for(ull i {0};i<=n;i++){
|
|
|
|
for(ull j{0};j<=std::min(i,m);j++){
|
|
|
|
if(C(i,j)%k==0)ans++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
std::cout<<ans<<'\n';
|
|
|
|
}
|
2024-10-08 05:41:59 +00:00
|
|
|
}
|