Cod sursa(job #1549679)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 decembrie 2015 17:13:56
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define SQRT 1000000
int exp[SQRT],fact[SQRT];
inline int cauta(int nr,int n){
    int flag=1,i,con;
    long long p;
    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 a,b,d,e,rez,pas,n;
    fi=fopen("gfact.in" ,"r");
    fout=fopen("gfact.out" ,"w");
    fscanf(fi,"%d%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=1<<30;pas;pas>>=1)
        if(cauta(rez+pas,n)==0)
           rez+=pas;
    fprintf(fout,"%d" ,rez+1);
    fclose(fi);
    fclose(fout);
    return 0;
}