Cod sursa(job #906905)

Utilizator avaspataruAva Spataru avaspataru Data 7 martie 2013 13:15:44
Problema GFact Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
using namespace std;

int put[51],a,q,p,d,m,l1,l2;
long long b;

int putereaa(int x,int d){//la ce putere apare d in x!
    int jos,putere=0,i,ci;
    jos=d;
    while(jos<=x){
        putere+=(x/jos);
        jos*=d;
    }
    return putere;
}



void descomp(int cb){
    int div=2;
    while(cb!=1){
        while(cb%div==0){
            cb/=div;
            put[div]++;
        }
        div++;
    }
}


int main(){
    int xx,i,pp,rez;


    freopen("gfact.in","r",stdin);
    freopen("gfact.out","w",stdout);
    scanf("%d%d",&a,&q);
    descomp(a);
    l1=1;
    l2=2000000000;


    for(i=1;i<=50;i++){
        if(put[i]!=0){
            l2=2000000000;
            while(l1<=l2){
                m=(l1+l2)/2;
                xx=putereaa(m,i);
                if(xx<q*put[i]){
                    l1=m+1;
                }
                else
                if(xx>q*put[i])
                    l2=m-1;
                else{
                    rez=m;
                    l2=m-1;
                }
            }
        }
    }
    printf("%d",rez);
    return 0;
}