匈牙利板子
#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" );
}
}
}