Cod sursa(job #1714047)

Utilizator dragostanTantaru Dragos Constantin dragostan Data 7 iunie 2016 11:21:48
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long  pas=1LL<<50,p,q,m=0;
long long fact[30],put[30];
long long putere(long long n,long long d)
{
    long long ptr=0;
    while(n>=d)
    {
        ptr+=n/d;
        n/=d;
    }
    return ptr;
}
bool sepoate(long long  n)
{
    long long  i;
    for(i=1;i<=m;++i)
        if(putere(n,fact[i])<put[i]*q)
            return false;
    return true;
}
int main()
{
    long long i=0,cop;
    long long j=0;
    register long long  d=2;
    in >> p >> q;
    cop=p;
    for(;d*d<=cop; ++d)
    {
        if(cop%d==0) ++m;
        while(cop%d==0)
        {
            cop/=d;
            fact[m]=d;
            put[m]++;
        }
    }
    if(cop>1)
    {
        ++m;
        fact[m]=cop;
        put[m]++;
    }
    while(pas)
    {
        if(!sepoate(j+pas))
            j+=pas;
        pas/=2;
    }
    out << j+1;
    return 0;
}