Cod sursa(job #3353185)

Utilizator cristiz123456Zoescu Cristian cristiz123456 Data 5 mai 2026 14:34:49
Problema Frac Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;

int primi[10];
long long rasp(long long a, long long n, int ap)
{
    long long raspuns = 0, scad;
    for(int i = 0; i <= ap; i++)
    {
        raspuns += a / primi[i];
    }
    for(int i = 0; i < (1 << ap + 1); i++)
    {
        if(__builtin_popcount(i) > 1)
        {
            scad = 1;
            for(int j = 0; j <= ap; j++)
            {
                if((i >> j) & 1 == 1)
                {
                    scad *= primi[j];
                }
            }
            raspuns -= a / scad;
        }
    }
    return raspuns;
}
int main()
{
    ifstream cin("frac.in");
    ofstream cout("frac.out");
    int p, rez, d, ap = 0;
    long long st, dr, mij, n, cn, ras;
    cin >> n >> p;
    d = 2;
    cn = n;
    while(d * d <= n)
    {
        if(n % d == 0)
        {
            primi[ap++] = d;
            //printf("1");
            while(n % d == 0)
            {
                n /= d;
            }
        }
        d++;
    }
    if(n > 1)
        primi[ap++] = n;
    n = cn;
    ap--;
    st = 1;
    dr = INT_MAX;
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        //printf("%lld ",mij);
        rez = rasp(mij, n, ap);
        rez = mij - rez;
        if(rez < p)
        {
            st = mij + 1;
        }
        else
        {
            ras = mij;
            dr = mij - 1;
        }
    }
    cout << ras;
    return 0;
}