匈牙利板子
#include<bits/stdc++.h>
#define M(a,b) memset(a,b,sizeof(a))
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const int MAXN=2049;
typedef long long LL;
vector<int> g[MAXN];
int from[MAXN],tot;
bool use[MAXN];
bool match(int x)
{
for(int i=0;i<g[x].size();i++)
{
if(!use[g[x][i]])
{
use[g[x][i]]=1;
if(from[g[x][i]]==-1||match(from[g[x][i]]))
{
from[g[x][i]]=x;
return true;
}
}
}
return false;
}
int h(int n)
{
tot=0;memset(from,255,sizeof(from));
for(int i=1;i<=n;i++)
{
memset(use,0,sizeof(use));
if(match(i))
{
++tot;
}
}
return tot;
}
int main()
{
int T;scanf("%d",&T);int cas=0;
while(T--)
{
int s,n;scanf("%d%d",&s,&n);
if(s<n) swap(s,n);
printf("Case #%d: ",++cas);
if(n>512) puts("No");
else
{
for(int i=1;i<=n;i++)
{
g[i].clear();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((s+i)%j==0)
{
g[j].push_back(i+n);
}
}
}
if(h(n)==n) puts("Yes");
else puts("No");
}
}
}