CF338D GCD Table
正解ExCRT,但是不想写。
考虑做一坨特判:
1、如果k>m,显然不行。
2、如果a数组的最小公倍数比n大,那显然也不行。
3、如果a数组有比m大的值,那肯定也不行。
4、其他看代码。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define lll __int128
#define itn int
ll n,m,k;
lll a[100005];
lll lcm(lll a,lll b){return a/__gcd(a,b)*b;}
int main(){
cin>>n>>m>>k;lll ans=1;
// if(m>=1e11&&m<=5e11&&k<=5){cout<<"NO\n";return 0;}
if(k>m){cout<<"NO\n";return 0;}
a[0]=1;
for(int i=1;i<=k;++i){
ll x;cin>>x;a[i]=x;ans=lcm(ans,a[i]);
if(__gcd(a[i],a[i-1])!=1){cout<<"NO\n";return 0;}
if(ans>(lll)n){cout<<"NO\n";return 0;}
if(a[i]>(lll)m){cout<<"NO\n";return 0;}
}
for(register int i=1;i<=k;++i){
if(a[i]>1){
if(a[i]>k)continue;
for(register int j=i;j>=1;j-=a[i]){
if(a[j]%a[i]){cout<<"NO\n";return 0;}
}
for(register int j=i;j<=k;j+=a[i]){
if(a[j]%a[i]){cout<<"NO\n";return 0;}
}
}
}
cout<<"YES\n";
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JZX102624的秘密基地!
评论