Cod sursa(job #2701217)

Utilizator Desiree_ClaryArmaczki Alexandra Desiree_Clary Data 30 ianuarie 2021 10:25:24
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;
ifstream fin ("frac.in");
ofstream fout("frac.out");
long long v[100], n, nr, k, p, d, i, total, sol, nr2, st, dr, mid, x, j;

long long poz( long long a )
{
    total=0;
    for ( k=1; k < (1<<(nr+1)); k++ ){
        nr2 = 0; sol =1;
        for ( j=0; j < nr; j++ )
            if ( (k >> j) & 1 )
                sol *= v[j+1], nr2++;
        if ( nr2%2 ) total += a/sol;
        else total -= a/sol;
    }
    return (a-total)/2;
}

int main()
{
    fin>>n>>p;
    d=2;
    while ( n > 1 ){
        if ( n%d == 0 )
            v[++nr] = d;
        while ( n%d == 0 ) n/=d;
        d++;
        if ( d*d > n && n > 1 ) d=n;
    }

    st=1;
    dr=(1LL<<61);
    while ( st <= dr ){
        mid = st + (dr-st)/2;
        x = poz (mid);
        if ( x >= p ) dr = mid-1;
        else st = mid+1;
    }
    fout<<st;
    return 0;
}