Cod sursa(job #3287752)

Utilizator solicasolica solica solica Data 19 martie 2025 09:25:53
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
/*
  ____   ___  _     ___ ____    _
 / ___| / _ \| |   |_ _/ ___|  / \
 \___ \| | | | |    | | |     / _ \
  ___) | |_| | |___ | | |___ / ___ \
 |____/ \___/|_____|___\____/_/   \_\

*/
#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define int long long int
#define pii pair<int,int>

const int NMAX = 2e5+9;

const int MOD = 1e9+7;

int binpow(int n, int k)
{
    if (k==0)
    {
        return 1;
    }
    int x=binpow(n,k/2)%MOD;
    if (k%2==0)
    {
        return x*x%MOD;
    }
    else
    {
        return x*x%MOD*n%MOD;
    }
}


int a,b,i,j;

int st,dr,mij;

vector<int>divs;

int numberdoubleprimes(int x)
{
    int cntr=divs.size();
    int answer=0;
    for (int mask=1; mask<(1<<cntr); mask++)
    {
        int cnr=1;
        for (int i=0; i<cntr; i++)
        {
            if ((1<<i)&mask)
            {
                cnr*=divs[i];
            }
        }
        if (__builtin_popcount (mask)%2==1)
        {
            answer+=x/cnr;
        }
        else
        {
            answer-=x/cnr;
        }
    }
    return x-answer;
}

ifstream fin ("frac.in");
ofstream fout ("frac.out");

#define cin fin
#define cout fout

void run_case ()
{
    cin>>a>>b;
    st=0,dr=1e18;
    int d=2;
    while (a>1)
    {
        int p=0;
        while (a%d==0)
        {
            p++;
            a/=d;
        }
        if (p)
        {
            divs.pb (d);
        }
        d++;
        if (d*d>a && a>1)
        {
            d=a;
        }
    }
    while (dr-st>1)
    {
        int mij=(st+dr)/2;
        if (numberdoubleprimes (mij)>=b)
        {
            dr=mij;
        }
        else
        {
            st=mij;
        }
    }
    cout<<dr;
}

signed main ()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL),cout.tie (NULL);
    int teste;
    teste=1;
    while (teste--)
    {
        run_case();
    }
}