Cod sursa(job #2088109)

Utilizator razvancostacheCostache Razvan razvancostache Data 14 decembrie 2017 19:31:07
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int N=20;
int ndp,dp[N],e[N],q,p;

long long putere(long long n, int p)
{
    long long nr=0;
    while(n>=p)
    {
        nr+=n/p;
        n/=p;
    }
    return nr;
}

bool sedivide(long long n)
{
    for(int i=1; i<=ndp; i++)
    {
        if(putere(n,dp[i])<e[i]*q)
            return false;
    }
    return true;
}
int main()
{
    long long r,pas,d,k;
        f>>p>>q;
    pas=1<<28;
    r=0;
    d=2;
    while(d*d<=p)
    {
        if(p%d==0)
        {
            dp[++ndp]=d;
            k=0;
            while(p%d==0)
            {
                p/=d;
                k++;
            }
        }
    }
    if(p!=1)
    {
        dp[++ndp]=p;
        e[ndp]=1;
    }
    while(pas!=0)
    {
        if(!sedivide(r+pas))
        {
            r+=pas;
        }
        pas/=2;
    }
    r++;
    g<<r;


    return 0;
}