Cod sursa(job #3217128)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 21 martie 2024 11:45:33
Problema Frac Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

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

#define int long long
const int INF=1e18;
vector<int>divi;

void decompose(int n)
{
    int d=2;
    while(n!=1)
    {
        while(n%d==0)
            n/=d;
        divi.push_back(d);
        if(d*d>n && n!=1)
        {
            divi.push_back(n);
            n=1;
        }
        d++;
    }
}


bool valid(int x,int k)
{
    int n,mask,i,j,s=x;
    n=divi.size();
    for(mask=1;mask<(1<<n);mask++)
    {
        int kon=0;
        int p=1;
        for(j=0;j<n;j++)
        {
            if(mask & (1<<j))
            {
                kon++;
                p*=divi[j];
            }
        }
        if(kon & 1)
            s-=x/p;
        else
            s+=x/p;
    }
    return s>=k;
}

signed main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    int n,k;
    fin>>n>>k;
    decompose(n);
    int st=1,dr=INF,ans=0;
    while(st<=dr)
    {
        int mij=st+dr;
        mij/=2;
        if(valid(mij,k))
        {
            dr=mij-1;
            ans=mij;
        }
        else
            st=mij+1;
    }
    fout<<ans;
    fin.close();
    fout.close();
    return 0;
}