CF1603A题解
题目大意
给定一个数组
题目分析
首先一个性质是若
注意一直算的话最小公倍数非常大,
代码
#include<bits/stdc++.h>
#define YPC rubbish
#define R register
#define I inline
#define ll long long
#define ull unsigned long long
#define LL __int128
#define db double
using namespace std;
#define pb push_back
#define pii pair<int,int>
#define pli pair<ll,int>
#define pll pair<ll,ll>
#define mp(x,y) make_pair(x,y)
#define piii pair<pair<int,int>,int>
#define mp3(x,y,z) make_pair(make_pair(x,y),z)
#define fi first
#define se second
#define putint(x) printf("%d\n",x)
#define putll(x) printf("%lld\n",x)
#define putull(x) printf("%llu\n",x)
#define lowbit(x) ((x)&(-(x)))
#define chkmin(x,y) (x=min(x,y))
#define chkmax(x,y) (x=max(x,y))
#define inv(x) ksm(x,mod-2)
#define inf (1e9)
#define INF (1e18)
#define eps (1e-8)
#define For(i,x,y) for(R int i=x;i<=y;++i)
#define For2(i,x,y,k) for(R int i=x;i<=y;i+=k)
#define Rof(i,x,y) for(R int i=x;i>=y;--i)
#define Rof2(i,x,y,k) for(R int i=x;i>=y;i-=k)
#define ForG(i,edge,x) for(auto i:edge[x])
I int read()
{
char ch=getchar();
int res=0,flag=1;
while(ch<'0'||ch>'9')
{
if(ch=='-')
flag=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
res=res*10+ch-'0';
ch=getchar();
}
return res*flag;
}
int T,n,a[100001];
int main()
{
T=read();
while(T--)
{
n=read();
bool res=1;
ll lcm=1;
For(i,1,n)
a[i]=read();
For(i,1,n)
{
if(lcm>inf)
break;
lcm=lcm*(i+1)/__gcd(lcm,(ll)(i+1));
if(a[i]%lcm==0)
{
res=0;
break;
}
}
if(res)
puts("YES");
else
puts("NO");
}
return 0;
}