Cod sursa(job #3340213)

Utilizator M132M132 M132 M132 Data 12 februarie 2026 18:41:13
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

long long calc(long long a, long long b){
    vector<int> prime;
    long long ans = 0;
    int d = 2, p = 1;
    while(b > 1)
    {
        p = 0;
        while(b && b % d == 0)
        {
            b /= d;
            p++;
        }
        if(p)
            prime.push_back(d);
        d++;
        if(d *d > b && b > 1)
            d = b;
    }
    int s = prime.size();
    for(int mask = 1; mask < (1 << s); mask++){
        long long sm = 1;
        for(int i = 0; i < s; i++)
        {
            if(mask & (1 << i))
                sm = 1ULL * sm * prime[i];
        }
        if(sm <= a)
        {
            if(__builtin_popcount(mask) % 2 == 0)
                ans -= (a / sm);
            else
                ans += (a / sm);
        }
    }
    return a - ans;
}
long long n, p;
int main(){
    f >> n >> p;
    long long st = 1, dr = 1e18;
    while(st <= dr)
    {
        long long tm = (st + dr) / 2;
        long long nr = calc(tm, n);
        if(nr < p)
            st = tm + 1;
        else
            dr = tm - 1;
    }
    g << st << " " << '\n';
}