Cod sursa(job #1804247)

Utilizator EmplopiStefan Nitu Emplopi Data 12 noiembrie 2016 12:57:08
Problema GFact Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>

int prim[10], ex[10], nr;

void facprim(int n){
    int div=2, e;
    while(div*div<=n){
        if(n%div==0){
            prim[nr]=div;
            e=0;
            while(n%div==0){
                n/=div;
                e++;
            }
            ex[nr]=e;
            nr++;
        }
        div++;
    }
    if(n!=1){
        prim[nr]=n;
        ex[nr]=1;
        nr++;
    }
}

long long  baga(long long n, long long div){
    long long divc=div, s=0;
    while(div<=n && div!=0){
        s+=n/div;
        div*=divc;
    }

    return s;
}

int da(long long n){
    int i, da=1;
    for(i=0;i<nr;i++)
        if(baga(n, prim[i])<ex[i])
            da=0;

    return da;
}

long long calc(){
    long long poz, pas;
    poz=1;
    pas=1LL<<60;
    while(pas!=0){
        if(da(poz+pas)==0)
            poz+=pas;
        pas/=2;
    }
    poz++;

    return poz;
}

int main(){
    FILE *fin, *fout;
    int p, q, i;
    fin=fopen("gfact.in", "r");
    fout=fopen("gfact.out", "w");
    fscanf(fin, "%d%d", &p, &q);
    nr=0;
    facprim(p);
    for(i=0;i<nr;i++)
        ex[i]*=q;
    fprintf(fout, "%lld", calc());
    fclose(fin);
    fclose(fout);

    return 0;
}