Pagini recente » Cod sursa (job #1396284) | Cod sursa (job #1884446) | Cod sursa (job #305894) | Cod sursa (job #2224703) | Cod sursa (job #2085116)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
unsigned long long int p,q;
void cit(){
in>>p>>q;
}
void afis(vector<pair<unsigned long long int,unsigned long long int> >perechi){
for(pair<unsigned long long int,unsigned long long int> it : perechi)
cerr<<it.first<<"^"<<it.second<<"\n";
}
void diviz(unsigned long long int p,vector<pair<unsigned long long int,unsigned long long int> >&perechi){
unsigned long long int d = 2,cnt;
while(d*d <= p){
cnt = 0;
if(p % d == 0){
while(p % d == 0){
p /= d;
cnt++;
}
perechi.push_back(make_pair(d,cnt*q));
}
d++;
}
if(p != 1)
perechi.push_back(make_pair(p,q));
}
bool validare(unsigned long long int x,vector<pair<unsigned long long int,unsigned long long int> > perechi_p){
bool ok = false;
for(pair<unsigned long long int,unsigned long long int>it : perechi_p){
unsigned long long int a = it.first;
int p = it.second;
unsigned long long int cnt = 0;
while(x >= a){
cnt += x / a;
a *= it.first;
}
if(p <= cnt)
ok = true;
}
return ok;
}
void cautbin(){
unsigned long long int pas = 1LL<<50,r = 0;
vector<pair<unsigned long long int,unsigned long long int> >perechi_p;
diviz(p,perechi_p);
while(pas){
if(validare(r+pas,perechi_p) == false)
r += pas;
pas /= 2;
}
r ++;
out<<r;
}
int main()
{
cit();
cautbin();
return 0;
}