Cod sursa(job #2082770)

Utilizator anamariazidaruZidaru Ana-Maria anamariazidaru Data 6 decembrie 2017 19:25:54
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

ifstream f ("gfact.in");
ofstream g ("gfact.out");

int d[30002], p[30002];

long long r, n1, ndp, n, m, pas;

long long putere (long long n1, int p1)
{
    long long nr0=0;
    while (n1>=p1)
    {
        nr0+=(n1/=p1);
    }
    return nr0;
}

bool sedivide (long long r)
{
    for (int i=0; i<ndp; i++)
    {
        if (putere(r, d[i])<p[i]*m)
        {
            return false;
        }
    }
    return true;
}

int main()
{
    int a, i;
    f>>n>>m;
    r=0;
    pas=1LL<<45;
    ndp=0;
    a=2;
    //g<<n<<endl;
    while (a*a<=n)
    {
        p[ndp]=0;
        if (n%a==0)
        {
            d[ndp]=a;
            while (n%a==0)
            {
                p[ndp]++;
                n /= a;
            }
            ndp++;
        }
        a++;
    }
    if (n>1)
    {
        d[ndp]=n;
        p[ndp]=1;
        ndp++;
    }
    while (pas!=0)
    {
        if (!sedivide(r+pas))
        {
            r+=pas;
        }
        pas /= 2;
    }
    g<<r+1;
    return 0;
}