http://codeforces.com/problemset/problem/922/C
n对1到k取余 问能否得到k个不同的数
n%1==0 => n%2==1 => n%3==2 => ... => n%k==k-1
n=2*a-1=3*b-1= ... =k*z-1
即判断n+1是否为1到k的lcm的倍数 lcm接近指数增长 超过n直接输出no
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll getlcm(ll a,ll b)
{
ll res,t;
res=a*b;
while(b>0)
{
t=b,b=a%b,a=t;
}
return res/a;
}
int main()
{
ll n,k,i,lcm;
scanf("%lld%lld",&n,&k);
lcm=1;
for(i=2;i<=k&&lcm-1<=n;i++) lcm=getlcm(lcm,i);
if((n+1)%lcm==0) printf("Yes\n");
else printf("No\n");
return 0;
}