标签:range because else print imu pairs last rest state
2 17 14 17Sample Output
2,3 are closest, 7,11 are most distant. There are no adjacent primes.
题意 : 求一下所给区间的相邻两素数的最大差值和最小差值
bool prime[47000];
bool pt[eps];
int main() {
ll a, b;
memset(prime, true, sizeof(prime));
for(int i = 2; i < 47000; i++){
if (prime[i]){
for(int j = i+i; j < 47000; j += i){
prime[j] = false;
}
}
}
while(~scanf("%lld%lld", &a, &b)){
memset(pt, true, sizeof(pt));
for(ll i = 2; i*i <= b; i++){
if (prime[i]){
for(ll j = i*max(2LL, (a+i-1)/i); j <= b; j += i){
pt[j-a] = false;
}
}
}
ll aa = -1, bb = -1, cc = -1, dd = -1;
ll last, pr;
ll t1 = 9999999, t2 = -1;
int sign = 1;
for(ll i = 0; i <= b-a; i++){
if (pt[i]){
pr = i + a;
if (pr == 1) continue;
ll cha = pr - last;
if (sign){
last = pr;
sign = 0;
continue;
}
if (cha < t1){
t1 = cha;
aa = last;
bb = pr;
}
if (cha > t2){
t2 = cha;
cc = last;
dd = pr;
}
last = pr;
}
}
if (aa == -1){
printf("There are no adjacent primes.\n");
}
else {
printf("%lld,%lld are closest, %lld,%lld are most distant.\n", aa, bb, cc, dd);
}
}
return 0;
}
标签:range because else print imu pairs last rest state
原文地址:http://www.cnblogs.com/ccut-ry/p/7834616.html