链接:
https://codeforces.com/problemset/problem/1603/A
题意:
一个数列a,当ai不能被i+1整除时,ai可以被消除,后面数字依次补上,判断能否全部删除
解:
根据lcm(最小公倍数),不能被2~26(第一位1,1+1=2)整除的数字超过1E9
那么对个数字做判断的时候取1到min(26,i+1),因为要全部删除,那么前面26位的也要删除,所以后面的能被26内数字删除的迟早会排到前面,根据顺序和需求删除,只要有一个不能删除,那就是不行
实际代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
ll gcd(ll a,ll b)
{
if(b==0) return a;
if(a<b) swap(a,b);
return a%b==0?b:gcd(b,a%b);
}
ll lcm(ll a,ll b)//lcm(1~27)>INT_MAX
{
return a*b/gcd(a,b);
}
bool PD(int temp,int i,bool ans)
{
if(ans==0) return 0;
for(int j=2;j<=min(26,i+1);j++)
{
if(temp%j!=0) return 1;
}
return 0;
}
int main()
{
int T;
cin>>T;
for(int f=1;f<=T;f++)
{
int n;
cin>>n;
bool ans=1;
int sc=0;
for(int i=1;i<=n;i++)
{
int temp;
cin>>temp;
ans=PD(temp,i,ans);
}
if(ans!=0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output