Cod sursa(job #1748381)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 26 august 2016 12:38:51
Problema GFact Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#define maxd 510
const long long lim = 1LL << 50;
long long div[maxd],put[maxd],n,baza,exp;
void divizori(long long x){
    long long i;
    for(i=2;i*i<=x;i++)
        if(x%i==0){
            n++;
            div[n]=i;
            while(x%i==0){
                x/=i;
                put[n]++;
            }
        }
    if(x!=1){
        n++;
        div[n]=x;
        put[n]=1;
    }
}
int verif(long long x){
    long long i,k,sum;
    for(i=1;i<=n;i++){
        sum=0;
        k=div[i];
        while(x/k>0){
            sum+=x/k;
            k=k*div[i];
        }
        if(sum<put[i]*exp)
            return 0;
    }
    return 1;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("gfact.in","r");
    fout=fopen("gfact.out","w");
    long long st,dr,mij,rasp=0;
    fscanf(fin,"%lld%lld",&baza,&exp);
    divizori(baza);
    st=0;
    dr=lim;
    while(st<=dr){
        mij=(st+dr)/2;
        if(verif(mij)==1){
            rasp=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    fprintf(fout,"%lld",rasp);
    fclose(fin);
    fclose(fout);
    return 0;
}