Pagini recente » Cod sursa (job #1561154) | Istoria paginii runda/nu_am_fost_acasa | Statistici rotaru robert marian (brasov2003) | Cod sursa (job #1015596) | Cod sursa (job #754248)
Cod sursa(job #754248)
#include<fstream>
using namespace std;
int p,q,nr;
fstream in,out;
struct pereche
{
int numar;
int putere;
};
pereche v[100];
bool verificare(long long);
long long putere(long long,int);
long long cautare()
{
long long pas=1LL<<60,i;
for(i=0;pas!=0;pas/=2)
if(!verificare(i+pas))
i+=pas;
return i+1;
}
bool verificare(long long x)
{
for(int i=1 ; i<=nr ; i++)
if(putere(x,v[i].numar)<v[i].putere)
return false;
return true;
}
long long putere(long long x,int p)
{
long long ct=0;
while(x>=p)
{
ct+=x/p;
x=x/p;
}
return ct;
}
void descompunere(int n)
{
int i;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
v[++nr].numar=i;
v[nr].putere=0;
while(n%i==0)
{
n/=i;
v[nr].putere++;
}
v[nr].putere=v[nr].putere*q;
}
if(n!=1)
{
v[++nr].numar=n;
v[nr].putere=q;
}
//for(i=1;i<=nr;i++)
//out<<v[i].numar<<" "<<v[i].putere<<"\n";
}
int main()
{
in.open("gfact.in",ios::in);
out.open("gfact.out",ios::out);
in>>p>>q;
descompunere(p);
out<<cautare()<<"\n";
in.close();
out.close();
}