#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
long long m[10002],n,M,lcm;
int k;
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long egcd(long long a,long long b,long long &x,long long &y)
{
if(b==0)
{
x=1; y=0;
return a;
}
long long gcd=egcd(b,a%b,y,x);
y-=a/b*x;
return gcd;
}
long long china()
{
long long x,y,b=0,mm=m[0],d;
for(int i=1;i<k;i++)
{
long long c=b+i;
d=egcd(mm,m[i],x,y);
if(c%d) return -1;
long long t=m[i]/d;
x=((c/d*x)%t+t)%t;
if(x) x-=t;
b-=mm*x;
mm=mm/gcd(mm,m[i])*m[i];
}
return b;
}
bool judge()
{
if(lcm>n) return false;
long long ans=china();
if(ans<0||ans>n) return false;
if(ans==0) ans=lcm;
if(ans+k-1>M) return false;
for(int i=0;i<k;i++)
if(gcd(lcm,ans+i)!=m[i]) return false;
return true;
}
int main()
{
int i;
scanf("%I64d%I64d%d",&n,&M,&k);
for(i=0;i<k;i++) scanf("%I64d",&m[i]);
lcm=1;
for(i=0;i<k;i++)
{
lcm=lcm/gcd(lcm,m[i])*m[i];
if(lcm>n) break;
}
judge()?puts("YES"):puts("NO");
}
同余方程的合并——codeforces338D
最新推荐文章于 2024-01-15 12:12:24 发布