Cod sursa(job #1123147)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 25 februarie 2014 23:03:18
Problema GFact Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<cstdio>
struct div{
    int x;
    int w;
}v[1000000];
int n,q,a,b,i,j,nr;
long long p,u,mid;
FILE *f,*g;
int verif(long long mid){
    int i,p=1,a;
    for(i=1;i<=nr;i++){
        p=v[i].x;
        a=0;
        while(p<=mid&&a<=v[i].w){
            a+=mid/p;
            p*=v[i].x;
        }
        if(a<v[i].w)
            return 0;
    }
    return 1;
}
int main(){
    f=fopen("gfact.in","r");
    g=fopen("gfact.out","w");
    fscanf(f,"%d%d",&n,&q);
    a=n;
    for(i=2;i<=n/i;i++){
        if(a%i==0){
            v[++nr].x=i;
            while(a%i==0){
                v[nr].w+=q;
                a/=i;
            }
        }
    }
    if(a!=0){
        v[++nr].x=a;
        v[nr].w=q;
    }
    p=1;
    u=1LL*n*q;
    while(p<=u){
        mid=(p+u)/2;
        if(verif(mid))
            u=mid-1;
        else
            p=mid+1;
    }
    fprintf(g,"%lld",p);



    fclose(f);
    fclose(g);
    return 0;
}