Cod sursa(job #1849269)

Utilizator sabinantonSabin Anton sabinanton Data 17 ianuarie 2017 11:04:29
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p[101],d[101],c;
int pt, q;

void desc(long long n)
{
   long long div=2,nr=0;
    while(div * div <= n) {
        if(n%div==0) {
            nr=0;
            while(n%div==0) {
                n/=div;
                nr++;
            }
            d[++c]=div;
            p[c]=nr;
        }
        div++;
    }
    if (n != 1) {
		d[++c] = n;
		p[c] = 1;
    }
}

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

bool fact(long long n)
{
    for(int i=1; i<=c; i++) {
        if(putere(n,d[i])<(long long)p[i]*q) {
            return false;
        }
    }
    return true;
}

void cautare()
{
    long long pas=1LL<<60,r=0;
    while(pas!=0) {
        if(!fact(r+pas)) {
            r+=pas;
        }
        pas/=2;
    }
    fout << 1 + r;
}

int main()
{
    fin>>pt>>q;
    desc(pt);
    cautare();
    return 0;
}