Cod sursa(job #3315752)

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

long long fact[100], puteri[100];

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

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

    st = 0;
    dr = (1LL << 62) - 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");

    long long p, q, d, ind;

    fscanf(fin, "%lld%lld", &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, "%lld\n", caut_bin(ind));
    return 0;
}