Cod sursa(job #1141650)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 13 martie 2014 00:25:52
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>

using namespace std;

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

long long n,p,i,j,k,st,dr,mid,rez,r,prod;

long long v[100010];

bool f[110000];

long long pinex (long long a) {

    rez=0;

    for (i=1;i<n;i++) {
        r=0;prod=1;
        for (j=1;j<=k;j++)
            if(i&(1LL<<(j-1))){
                r++;
                prod*=v[j];
            }
        if (r%2==0)
            rez+=a/prod;
        else
            rez-=a/prod;

        }
    return (a+rez);

}
int main () {

    fin>>n>>p;
    for (i=2;i*i<=n;i++) {
        if (f[i]==0) {
            if (n%i==0){
                v[++k]=i;
                while (n%i==0)
                    n/=i;
            }

            for (j=i+i;j*j<=n;j+=i)
                f[j]=1;
        }
    }
    if (n!=1)
        v[++k]=n;
    n=(1LL<<k);
    st=1;dr=(1LL<<61);
    while (st<=dr) {
        mid=st+(dr-st)/2;
        if (pinex (mid)>=p)
            dr=mid-1;
        else
            st=mid+1;
    }

    fout<<st<<"\n";

    return 0;
}