//离散DP ->lcm()状态少
#include<stdio.h>
#include<string.h>
#include<map>
using namespace std;
typedef __int64 lld;
const int maxn=50;
map<lld,lld>dp[maxn];
map<lld,lld>::iterator it;
lld n,m;
lld gcd(lld a,lld b){
return !b?a:gcd(b,a%b);
}
lld lcm(lld a,lld b){
return a/gcd(a,b)*b;
}
void Gao(){
lld i,j;
dp[1][1]=1;
for(i=2;i<=40;i++){
dp[i]=dp[i-1];
dp[i][i]++;
for(it=dp[i-1].begin();it!=dp[i-1].end();it++){
lld t=lcm(it->first,i);
dp[i][t]+=it->second;
}
}
}
int main(){
int T;
Gao();
scanf("%d",&T);
for(int cas=1;cas<=T;cas++){
scanf("%I64d%I64d",&n,&m);
lld ans=0;
for(it=dp[n].begin();it!=dp[n].end();it++)
if(it->first>=m)
ans+=it->second;
printf("Case #%d: %I64d\n",cas,ans);
}
return 0;
}
Hdu 4028
最新推荐文章于 2020-08-08 17:03:20 发布