Cod sursa(job #419347)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 17 martie 2010 12:38:08
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<iostream>
#include<string>

using namespace std;

#define LL long long

int p[100],q[100],k;
int P,Q;

int fine(LL B)
{
    for(int i=1;i<=k;++i)
    {
        LL deimp=p[i],cate=0;
        
        while(B/deimp)
        {
            cate+=(B/deimp);
            deimp*=p[i];          
        }    
        
        if(cate<q[i]*Q) return 0;
    }
    
    return 1;
}

int main()
{
    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    
    scanf("%d %d",&P,&Q);
    
    int nr=P;
    
    for(int i=2;(LL)i*i<=P && nr>1;++i)
       if(nr%i==0)
       {
           p[++k]=i;
                  
           while(nr%i==0)
           {
               ++q[k];
               nr/=i;          
           } 
       }
    
    if(nr>1) 
    {
        p[++k]=nr;
        q[k]=1;     
    }
       
    LL st=1,dr=9000000000000000LL;   
    
    while(st<dr)
    {
        LL mij=(st+dr)/2;
        
        if(fine(mij)) dr=mij;
        else st=mij+1;        
    }
    
    printf("%I64d",st);
    
    return 0;
}