Cod sursa(job #2068340)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 17 noiembrie 2017 16:56:48
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
const long long l=1LL<<46;
vector< pair <int,int> >v;
int p,q;
inline void desc_fact(int n)
{
    int co,d=2;
    while(d*d<=n)
    {
        if(n%d==0)
        {
            co=0;
            while(n%d==0)
            {
                n/=d;
                co++;
            }
            v.push_back(make_pair(d,co*q));
        }
        d++;
    }
    if(n>1)
        v.push_back(make_pair(n,q));
}
inline long long putere(long long n,int p)
{
    long long rez=0;
    while(n>=p)
        rez+=(n/=p);
    return rez;
}
inline bool verif(long long n)
{
    for(unsigned int i=0;i<v.size();i++)
        if(putere(n,v[i].first)<v[i].second)
            return false;
    return true;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("gfact.in","r");
    fout=fopen("gfact.out","w");
    fscanf(fin,"%d%d",&p,&q);
    desc_fact(p);
    long long pas,i=0;
    for(pas=l;pas;pas>>=1)
        if(!verif(i+pas))
            i+=pas;
    fprintf(fout,"%lld",i+1);
    fclose(fin);
    fclose(fout);
    return 0;
}