#include<bits/stdc++.h>
using namespace std;
typedef __int128_t i128;
typedef pair<i128,i128> pa;
const int MAXN=1e4+5;
queue<pa>q;
long long m[MAXN],r[MAXN];
i128 exgcd(i128 a,i128 b,i128 &x,i128 &y)
{
if(!b) return x=1,y=0,a;
i128 d=exgcd(b,a%b,y,x);
y-=a/b*x;
return d;
}
i128 gcd(i128 x,i128 y){return (!y)?x:gcd(y,x%y);}
i128 lcm(i128 x,i128 y){return x*y/gcd(x,y);}
long long exCRT()
{
while(q.size()>1)
{
i128 m1=q.front().first,r1=q.front().second;q.pop();
i128 m2=q.front().first,r2=q.front().second;q.pop();
i128 k1,k2,tmp=r2-r1;
i128 d=exgcd(m1,m2,k1,k2);
if(tmp%d) return -1;
k1*=tmp/d,k2*=-tmp/d;
i128 l=m1*m2/d,x=(r1+k1*m1%l+l)%l;
q.push({l,x});
}
return q.front().second;
}
int main()
{
long long x,y,k;
cin>>x>>y>>k;
i128 mul=1;
for(int i=1;i<=k;++i)
{
scanf("%lld",&m[i]);
mul=lcm(mul,m[i]);
if(mul>x){printf("NO\n");return 0;}
r[i]=((m[i]-i+1)%m[i]+m[i])%m[i];
q.push({m[i],r[i]});
}
long long ans=exCRT();
if(ans==-1 || ans+k-1>y){printf("NO\n");return 0;}
for(int i=1;i<=k;++i) if(gcd(mul,ans+i-1)!=m[i]){printf("NO\n");return 0;}
printf("YES\n");
return 0;
}
这份代码在本地编译能过,但交上去会CE,似乎是gcd和lcm函数命名与库函数冲突的原因,请问在noip考场上会本地就爆CE吗?(不然真就吃大亏了)