Cod sursa(job #2285745)

Utilizator CosaMateiMatei Cosa Gabriel CosaMatei Data 19 noiembrie 2018 09:01:43
Problema GFact Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("gfact.in");
ofstream out("gfact.out");

int p,q,nd=1;

const int L=31;

pair <int,int> v[100001];

void desc(int n)
{
    int dv = 2;
    while (dv * dv <= n)
    {
        if (n % dv == 0)
        {
            v[nd].first = dv;
            while (n % dv == 0)
            {
                v[nd].second++;
                n /= dv;
            }
            nd++;
        }
        dv++;
    }
    if (n > 1)
    {
        v[nd].first = n;
        v[nd++].second = 1;
    }
}

int getp(long long x, int y)
{
    long long ans=0;
    while(x>=y)
    {
        ans+=x/y;
        x/=y;
    }
    return ans;
}

bool check(long long n)
{
    for(int i=1;i<nd;++i)
    {
        if(getp(n,v[i].first)<v[i].second*q)
            return 0;
        return 1;
    }
}

long long binar()
{
    long long r=0;
    long long pas=1LL << L;
    while(pas)
    {
        if(!check(r+pas))
            r+=pas;
        pas/=2;
    }
    r++;
    return r;
}

int main()
{
    in>>p>>q;
    desc(p);
    out<<binar();
    return 0;
}