Cod sursa(job #1677830)

Utilizator mateibanuBanu Matei Costin mateibanu Data 6 aprilie 2016 20:22:50
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>

using namespace std;

FILE*f=fopen("frac.in","r");
FILE*g=fopen("frac.out","w");

long long h,v[101];

long long nr(long long m)
{
    long long p,r=0,j,i;
    for (i=1;i<(1<<h);i++)
    {
        p=1;
        for (j=0;j<h;j++)
            if ((1<<j)&i)
        {
            p=(long long)p*(-v[j+1]);
        }
        r+=(long long)m/p;
    }
    return r;
}

int main()
{
    long long n,k,i,p,u,m,r=0;
    fscanf(f,"%lld%lld",&n,&k);
    m=n;h=0;
    for (i=2;i*i<=m;i++)
    {
        if (!(n%i)) v[++h]=i;
        while (!(n%i)) n/=i;
    }
    n=m;
    p=1;u=(long long)1<<61;
    while (p<=u)
    {
        m=(p+u)/2;
        if (nr(m)<k)
        {
            p=m+1;
        }
        else
        {
            r=m;
            u=m-1;
        }
    }
    fprintf(g,"%lld",r);
    fclose(g);
    fclose(f);
    return 0;
}