Pagini recente » Cod sursa (job #1672382) | Cod sursa (job #476799) | Cod sursa (job #247330) | Cod sursa (job #1246664) | Cod sursa (job #2068340)
#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;
}