Advertisement
Misbah_Uddin_Tareq

UVA 10140 Prime Distance by rizwan vai

Oct 28th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define SeeYouAgain return 0
  3. using ll=long long int;
  4. using namespace std;
  5. const ll sz=1e6;
  6. ll fl[sz+5];
  7. vector<ll> primes,NewP;
  8.  
  9. void sieve(){
  10.     for (ll i=3; i*i<=sz; i+=2){
  11.         if (!fl[i])
  12.             for (ll j=i+i; j<=sz; j+=i)
  13.                 fl[j]=1;
  14.     }
  15.     primes.push_back(2);
  16.     for (ll i=3; i<=sz; i+=2)
  17.         if (!fl[i]) primes.push_back(i);
  18. }
  19.  
  20. void SegSieve(ll l,ll r){
  21.     memset(fl,0,sizeof fl);
  22.     for (ll i=0; primes[i]*primes[i]<=r; i++){
  23.         ll st=l/primes[i];
  24.         if (st*primes[i]<l) st++;
  25.         if (st==1) st++;
  26.         //printf("%lld=%lld\n",primes[i],st);
  27.         for (ll j=st*primes[i]; j<=r; j+=primes[i])
  28.             fl[j-l]=1;
  29.     }
  30.     for (ll i=l; i<=r; i++)
  31.         if (!fl[i-l]) NewP.push_back(i);
  32. }
  33. int main(){
  34.     sieve();
  35.     ll l,r;
  36.     while(~scanf("%lld %lld",&l,&r)){
  37.         if (l<2) l=2;
  38.         NewP.clear(), SegSieve(l,r);
  39.         if(NewP.size()<2){
  40.             puts("There are no adjacent primes.");
  41.             continue;
  42.         }
  43.         ll mnl=NewP[0],mnr=NewP[1];
  44.         ll mxl=NewP[0],mxr=NewP[1];
  45.         for (ll i=1; i<NewP.size(); i++){
  46.             if (mnr-mnl>NewP[i]-NewP[i-1])
  47.                 mnl=NewP[i-1],mnr=NewP[i];
  48.             if (mxr-mxl<NewP[i]-NewP[i-1])
  49.                 mxl=NewP[i-1],mxr=NewP[i];
  50.         }
  51.         printf("%lld,%lld are closest, %lld,%lld are most distant.\n",mnl,mnr,mxl,mxr);
  52.     }
  53.     SeeYouAgain;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement