Cod sursa(job #1714042)

Utilizator dragostanTantaru Dragos Constantin dragostan Data 7 iunie 2016 11:06:50
Problema GFact Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
long long  pas=1<<30,p,q,m=1;
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)
{
    int 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,aaa;
    long long j=0,fmax=-1;
    register long long  d=2;
    in >> p >> q;
    cop=p;
    for(; d*d<=cop; ++d)
        while(cop%d==0)
        {
            cop/=d;
            fact[m]=d;
            put[m]++;
            m++;
        }
    if(cop>1)
    {
        fact[m]=cop;
        put[m]++;
        ++m;
    }
    while(pas)
    {
        if(!sepoate(j+pas))
            j+=pas;
        pas/=2;
    }
    out << j+1;
    return 0;
}