বৃহস্পতিবার, ২ নভেম্বর, ২০১৭

UVA 10140 - Prime Distance

#include <bits/stdc++.h>
using namespace std;
#define mx 48000
long long vis[48000]= {0},ar[48000]= {0},i,j,k=0;
vector<long long >vec;
void sieve()
{
    for(i=4; i<=mx; i+=2)
        vis[i]=1;
    for(i=3; i<=sqrt(mx); i+=2)
    {
        if(vis[i]==0)
        {
            for(j=2*i; j<=mx; j+=i)
            {
                vis[j]=1;
            }
        }
    }
    vis[1]=1,vis[0]=1;
    for(i=1; i<=mx; i++)
    {
        if(vis[i]==0)
        {
            ar[k++]=i;
        }
    }
}
bool chk(long long nm)
{
    if(nm>=k)
    {
        for(long long i1=0; i1<k&&ar[i1]<=sqrt(nm); i1++)
        {
            if(nm%ar[i1]==0)
            {
                return 0;
            }
        }
        return 1;
    }
    else
    {
        if(vis[i]==0)
            return 1;
        else
            return 0;
    }
}
main()
{
    sieve();
    long long l,u;
    while(cin>>l>>u)
    {
        for(i=l; i<=u; i++)
        {
            if(chk(i))
            {
                vec.push_back(i);
            }
        }
        long long ll=vec.size(),dif=0,dif2,dif1,f=0,f1=0;
        if(ll<2)
            printf("There are no adjacent primes.\n");
        else
        {
            for(i=1; i<ll; i++)
            {
                if(i==1)
                {
                    dif=vec[i]-vec[i-1];
                    dif1=vec[i]-vec[i-1];
                    f=f1=i;
                }
                else
                {
                    dif2=vec[i]-vec[i-1];
                    if(dif2<dif)
                    {
                        f=i;
                        dif=dif2;
                    }
                    if(dif2>dif1)
                    {
                        dif1=dif2;
                        f1=i;
                    }
                }
            }
            printf("%lld,%lld are closest, %lld,%lld are most distant.\n",vec[f-1],vec[f],vec[f1-1],vec[f1]);
        }
        vec.clear();
    }
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...