Cod sursa(job #1550216)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 13 decembrie 2015 13:29:23
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#define SQRT 2000000
long long fact[SQRT];
int exp[SQRT];
inline int cauta(long long nr,int n){
    int flag=1,i;
    long long p,con;
    i=0;
    while(i<n&&flag==1){
        p=fact[i];
        con=0;
        while(p<=nr){
            con+=(nr/p);
            p=p*fact[i];
        }
        if(con<exp[i])
            flag=0;
        i++;
    }
    return flag;
}
int main(){
    FILE*fi,*fout;
    int e,n,b;
    long long rez,pas,d,a;
    fi=fopen("gfact.in" ,"r");
    fout=fopen("gfact.out" ,"w");
    fscanf(fi,"%lld%d" ,&a,&b);
    d=2;
    n=0;
    while(d*d<=a){
        e=0;
        while(a%d==0){
            a/=d;
            e++;
        }
        exp[n]=e*b;
        fact[n]=d;
        n++;
        d++;
    }
    if(a>1){
          exp[n]=b;
          fact[n]=a;
          n++;
    }
    rez=0;
    for(pas=1LL<<50LL;pas;pas/=2)
        if(cauta(rez+pas,n)==0)
            rez+=pas;
    fprintf(fout,"%lld" ,rez+1);
    fclose(fi);
    fclose(fout);
    return 0;
}