Cod sursa(job #1779868)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 15 octombrie 2016 17:36:10
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<fstream>
#include<bitset>
#define INF 100

using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long v[1000001],x[1000001], i,j,sol,nr,n,k,st,mid,a;
long long dr;
bitset<1000001> b;

long long cauta(long long a)
{
    long long i,j,ok,r=0;
    for(i=1;i<=a;i++)
    {
        ok=0;
        for(j=1;j<=nr;j++)
            if(i%x[j]==0)
            {
                ok=1;
                break;
            }
        if(ok==0)
            r++;
    }
    return r;
}

int main()
{
    for(i=2;i<=1000000;i++)
        if(b[i]==0)
        {
            for(j=i+i;j<=1000000;j+=i)
                b[j]=1;
            v[++nr]=i;
        }
    fin>>n>>k;
    nr=0;
    a=n;
    for(i=1;v[i]*v[i]<=a&&n!=1;i++)
    {
        if(n%v[i]==0)
        {
            x[++nr]=v[i];
            while(n%v[i]==0)
                n/=v[i];
        }
    }
    if(n!=1)
        x[++nr]=n;
    st=1;
    dr=INF;
    while(st<=dr)
    {
        sol=0;
        mid=(st+dr)/2;
        sol=cauta(mid);
        if(sol==k)
            dr=mid-1;
        else
            if(sol>k)
                dr=mid-1;
            else
                st=mid+1;
    }
    fout<<st;
    fin.close();
    fout.close();
    return 0;
}