UVA数据是不是随机的?
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<long long> pri;
bool is_prime[1<<30];
long long l,r;
void check(int x){
is_prime[0]=is_prime[1]=true;
for(long long i=2;i<=x;i++){
if(!is_prime[i]) pri.push_back(i);
for(long long j=0;j<pri.size();j++){
if(pri[j]*i>x) break;
is_prime[pri[j]*i]=true;
if(i%pri[j]==0) break;
}
}
}
signed main(){
while(scanf("%lld%lld",&l,&r)!=EOF){
check(sqrt(r));
bool ans[1000010];
vector<int> cnt;
memset(ans,true,sizeof ans);
for(int i=l;i<=r;i++){
for(int j=0;j<pri.size() && pri[j]<i;j++){
if(i%pri[j]==0){
ans[i-l]=false;
break;
}
}
}
for(int i=l;i<=r;i++){
if(ans[i-l] && l!=1) cnt.push_back(i);
}
if(cnt.size()<2){
printf("There are no adjacent primes.\n");
continue;
}
int min1,min2,max1,max2;
int dis1=1e9,dis2=0;
for(int i=0;i<cnt.size()-1;i++){
if(cnt[i+1]-cnt[i]<dis1){
dis1=cnt[i+1]-cnt[i];
min1=cnt[i],min2=cnt[i+1];
}
if(cnt[i+1]-cnt[i]>dis2){
dis2=cnt[i+1]-cnt[i];
max1=cnt[i],max2=cnt[i+1];
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",min1,min2,max1,max2);
}
}
上午交AC,下午WA,并且偶尔TLE。 why?