标签: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