Cod sursa(job #2528662)

Utilizator JesseMcCreeVladimir Sontea JesseMcCree Data 22 ianuarie 2020 12:33:46
Problema GFact Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

int factpr[50];
int puteri[50];
int f=0;

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

bool ok(long long n)
{
    long long a, b, p, put=0;
    bool k=true;
    for(int i=1; i<=f; i++)
    {
        if(putere(n, factpr[i])<puteri[i])
            return false;

    }
    return true;
}

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

    long long p, q, e;
    fscanf(fin, "%lld%lld", &p, &q);
    for(int i=2; i*i<=p; i++)
    {
        e=0;
        while(p%i==0)
        {
            p/=i;
            e++;
        }
        if(e!=0)
        {
            f++;
            factpr[f]=i;
            puteri[f]=e;

        }
    }
    if(p!=1)
    {
        f++;
        factpr[f]=p;
        puteri[f]=1;
    }

    for(int i=1; i<=f; i++)
    {
        puteri[i]*=q;
        //printf("%d %d\n", factpr[i], puteri[i]);
    }
    long long st=1, dr=60000000000000LL, mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(ok(mij))
        {
            dr=mij;
        }
        else
        {
            st=mij+1;
        }
    }
    printf("%lld", st);
    fclose(fin);
    fclose(fout);
    return 0;
}