Cod sursa(job #2045248)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 21 octombrie 2017 23:04:49
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>

using namespace std;
long long a,b,p,e,d,k,st,dr,mid,i,sol,ap,prod;
long long v[30],w[30];
ifstream fin ("frac.in");
ofstream fout ("frac.out");

int main (){

    fin>>a>>b;
    /// descompunem pe a in factori primi
    p = a;
    d = 2;
    while (p != 1 && d*d <= p){
        e = 0;
        while (p % d == 0){
            p/=d;
            e++;
        }
        if (e != 0)
            v[++k] = d;
        d++;
    }
    if (p != 1)
        v[++k] = p;
    st = 1;
    dr = 1000000000000000000;
    while (st <= dr){
        mid = (st+dr)/2;
        //******************
        for (i=0;i<=k;i++)
            w[i] = 0;
        sol = 0;
        while (w[0] == 0){
            i = k;
            while (w[i] == 1 && i>0){
                w[i] = 0;
                i--;
            }
            w[i] = 1;
            if (w[0] == 1)
                break;
            ap = 0;
            prod = 1;

            for (i=1;i<=k;i++)
                if (w[i] == 1){
                    prod *= v[i];
                    ap++;
                }
            if (ap % 2 == 0)
                sol -= mid/prod;
            else
                sol += mid/prod;

        }
        if (mid - sol < b)
            st = mid + 1;
        else
            dr = mid-1;

    }
    fout<<st;



    return 0;
}