Cod sursa(job #806293)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 2 noiembrie 2012 15:52:14
Problema GFact Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
int div[20],expp[20],nd=0,i;
void desc(int n){
    for(i=2;i*i<=n;i++){
        if(n%i==0){
            div[nd]=i;
            while(n%i==0){
                expp[nd]++;
                n/=i;
            }
            nd++;
        }
    }
    if(n!=1){
        div[nd]=n;
        expp[nd++]=1;
    }
}
long long putere(long long n,int d){
    long long s=0;
    while(n>=d){
        s=n/d+s;
        n/=d;
    }
    return s;
}
int proprietate(long long x,int q){
    int i;
    for(i=0;i<nd;i++)
        if(putere(x,div[i])<expp[i]*q)
            return 1;
    return 0;
}

int main(){
    int nr,min,q;
    long long j, pas;
    FILE *fin,*fout;
    fin=fopen("gfact.in","r");
    fout=fopen("gfact.out","w");
    fscanf(fin,"%d%d",&nr,&q);
    if(nr==1)
        fprintf(fout,"1");
    else {
        desc(nr);
        pas=(long long)1<<60;
        j=0;
        while(pas!=0){
            if(proprietate(j+pas,q)==1)
                j+=pas;
            pas/=2;
        }
        fprintf(fout,"%lld",1+j);
    }
    return 0;
}