Cod sursa(job #3315750)

Utilizator Belea_DariusBelea Mihai Darius Belea_Darius Data 15 octombrie 2025 21:07:26
Problema GFact Scor 80
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>

int fact[100], puteri[100];

int factG(int a, int b){
    int cnt;
    cnt = 0;
    while(a > 0){
        cnt += a / b;
        a /= b;
    }
    return cnt;
}

int caut_bin(int n){
    int st, dr, mij, rez, i;

    st = 0;
    dr = (1 << 31) - 1;
    while(st <= dr){
        mij = (st + dr) / 2;

        i = 0;
        while(i < n && factG(mij, fact[i]) >= puteri[i]){
            i ++;
        }
        if(i >= n){
            rez = mij;
            dr = mij - 1;
        }else{
            st = mij + 1;
        }
    }
    return rez;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("gfact.in", "r");
    fout = fopen("gfact.out", "w");

    int p, q, d, ind;

    fscanf(fin, "%d%d", &p, &q);

    ind = 0;
    d = 2;
    while(d * d <= p){
        if(p % d == 0){
            fact[ind] = d;
            while(p % d == 0){
                p = p / d;
                puteri[ind] ++;
            }
            puteri[ind] *= q;
            ind ++;
        }
        d ++;
    }
    if(p > 1){
        fact[ind] = p;
        puteri[ind] = q;
        ind ++;
        p = 1;
    }

    fprintf(fout, "%d\n", caut_bin(ind));
    return 0;
}