Cod sursa(job #1700358)

Utilizator JavaAlexDinu Alexandru JavaAlex Data 10 mai 2016 11:41:37
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#include <iostream>
using namespace std;

long long d[20] , e[20] , nd=0, p ,q;
FILE *in, *out;

void desc(){
    int i=2;
    while(i*i <= p){
        if(p%i == 0){
            d[++nd] = i;
            while(p%i == 0){
                e[nd]++;
                p /= i;
            }
        }
        i++;
    }
    if(p != 1){
        d[++nd] = p;
        e[nd] = 1;
    }
}

long long putere(long long n, long long d){
    long long r = 0;
    while (n >= d)
    {
        r += n / d;
        n /= d;
    }
    return r;
}

bool ok(long long n){
    long long r;
    for(int i=1;i<=nd;i++){
        r = putere(n , d[i]);
        if(r<e[i] * q) return false;
    }
    return true;
}

long long rez(){
    long long i=0 , pas = (1LL << 60LL);
    while(pas != 0){
        if(!ok(i+pas)) i+=pas;
        pas/=2;
    }
    return 1+i;
}

int main()
{
    in = fopen("gfact.in" , "r");
    fscanf(in , "%llu%llu" , &p , &q);
    fclose(in);
    desc();

    out = fopen("gfact.out" , "w");
    fprintf(out , "%llu" , rez());
    fclose(out);
    return 0;
}