Cod sursa(job #2135972)

Utilizator alexilasiAlex Ilasi alexilasi Data 19 februarie 2018 15:40:52
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<bits/stdc++.h>
#define ll long long

using namespace std;

ifstream fin("frac.in");
ofstream fout("frac.out");

ll p,n,k,d[11],i;

ll nr(ll x)
{   ll r=0;
    for(ll prod,sgn,i=0;i<(1LL<<k);++i)
    {   prod=sgn=1;
        for(ll j=0;j<k;++j)
            if((i&(1<<j)) != 0) prod*=d[j], sgn*=-1;
        r+=sgn*x/prod;
    }
    return r;
}
ll caut()
{   ll i,pas=1LL<<60;
    for(i=0;pas;pas>>=1)
        if(nr(i+pas)<p) i+=pas;
    return i+1;
}
int main()
{
    fin>>n>>p;
    for(i=2;i*i<=n;++i)
        if (n%i==0)
        {
            d[k++]=i;
            while(n%i==0)n/=i;
        }
    if(n>1)d[k++]=n;
    fout<<caut()<<'\n';
    return 0;
}