Cod sursa(job #1219434)

Utilizator mihaimusatMihai Musat mihaimusat Data 14 august 2014 10:38:34
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

ifstream f("frac.in");
ofstream g("frac.out");

long long t,a,b,n,i,j,cnt,k,last,sol,p,dr,st,mid,pp;

long long v[100005];

int main() {
    f>>b>>pp;
    n=0;
    for(i=2;i*i<=b;i++) {
        if(b%i==0)
            v[++n]=i;

        while(b%i==0) {
            b/=i;
        }
    }
    if(b!=1)
        v[++n]=b;
    last=(1LL<<n)-1;
    st=1;dr=(1LL<<60)+1;
    while(st<=dr) {
        mid=st+(dr-st)/2;
        sol=mid;
        for(i=1;i<=last;i++) {
            cnt=0;p=1;
            for(j=0;j<n;j++)
                if(((i>>j)&1LL)==1LL) {
                    cnt++;
                    p*=v[j+1];
                }
            if(cnt%2==0)
                sol+=mid/p;
            else
                sol-=mid/p;
        }
        if(sol>=pp)
            dr=mid-1;
        else
            st=mid+1;
    }
    g<<st<<"\n";
    return 0;
}