Cod sursa(job #2082699)

Utilizator VladimirPopa123Vladimir Popa VladimirPopa123 Data 6 decembrie 2017 18:26:35
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("gact.in");
ofstream fout("gact.out");
int nr_0(int);
long long putere(long long,int);
bool sedivide(long long);
const int lim=45;
int d[15],p[15],ndp=0,x,y;

int main()
{
    int a=2;
    fin>>x>>y;
    while(a*a<=x)
    {
        if(x%a==0)
        {
            d[ndp]=a;
            while(x%a==0)
            {
                p[ndp]++;
                x/=a;
            }
            ndp++;
        }
        a++;
    }
    if(x>1)
    {
        d[ndp]=x;
        p[ndp]=1;
        ndp++;
    }
    long long pas=1LL<<lim,r=0;
    while(pas)
    {
        if(!sedivide(r+pas)) r+=pas;
        pas/=2;
    }
    r++;
    fout<<r;
    return 0;
}

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

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