#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int t,n;
int cnt[N],prefix[N];
void dfs(int dep,int st,int mul,int sum){
//剪枝1
if(mul>1e5)return;
if(dep==n+1){
cnt[mul]++;return;
}
//剪枝2
int up = pow(1e5*1.0/mul,1.0/(n-dep+1))+5;
for(int i=st+1;i<(dep==n?min(sum,up):up);i++){
dfs(dep+1,i,mul*i,sum+i);
}
}
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
cin>>t>>n;
dfs(1,0,1,0);
for(int i=1;i<=1e5;i++)prefix[i]=prefix[i-1]+cnt[i];
while(t--){
int l,r;cin>>l>>r;
cout<<prefix[r]-prefix[l-1]<<'\n';
}
return 0;
}
特殊的多边形
最新推荐文章于 2024-06-15 23:36:03 发布