Cod sursa(job #2088110)

Utilizator aianisAndra Dumitru aianis Data 14 decembrie 2017 19:31:30
Problema GFact Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int dp[20], e[20], ndp, q;

void divp(int n){
    int p, d=2;
    while(d*d<=n){
        if(n%d==0){
            dp[++ndp]=d;
            p=0;
            while(n%d==0){
                n/=d;
                p++;
            }
            e[++ndp]=p;
        }
        d++;
    }
    if(n!=1){
        dp[++ndp]=n;
        e[ndp]=1;
    }
}

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

bool sedivide(long long n){
    for(int i=1; i<=ndp; i++){
        if(putere(n, dp[i])<e[i]*q){
            return false;
        }
    }
    return true;
}

int main()
{
    long long p, r=0, pas=1LL<<45;
    in>>p>>q;
    divp(p);
    while(pas!=0){
        if(!sedivide(r+pas))
            r+=pas;
        pas/=2;
    }
    r++;
    out<<r;
    return 0;
}