Cod sursa(job #3169675)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 15 noiembrie 2023 19:13:06
Problema GFact Scor 95
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>
#ifdef LOCAL
#define in cin
#define out cout
#endif
#define int int64_t
using namespace std;

#ifndef LOCAL
ifstream in("gfact.in");
ofstream out("gfact.out");
#endif

bool countt(int maxx,vector<pair<int,int>> bases,int q)
{
    int minn = -1;
    for(auto i:bases)
    {
        int cnt=0;
        int base1=i.first;
        while(base1<=maxx)
        {
            cnt+=maxx/base1;
            base1*=i.first;
        }
        if(cnt<i.second*q)return 0;
    }
    return 1;
}


signed main()
{
    int p,q;in>>p>>q;
    int st = 1, dr = __LONG_LONG_MAX__/2;
    vector<pair<int,int>> bases;
    int cp = p;
    for(int i=2;i*i<=p;i++)
    {
        int toAdd=0;
        while(cp%i==0)
        {
            cp/=i;
            toAdd++;
        }
        if(toAdd>1)bases.push_back({i,toAdd});
    }
    if(cp>1)bases.push_back({cp,1});
    while (st<dr)
    {
        int mid=(st+dr)/2;
        if(countt(mid,bases,q))
        {
            dr=mid;
        }
        else
        {
            st=mid+1;
        }
    }
    out<<st;
}