Pagini recente » Cod sursa (job #340612) | Cod sursa (job #2491538) | Cod sursa (job #669029) | Cod sursa (job #1405384) | Cod sursa (job #942102)
Cod sursa(job #942102)
#include<cstdio>
#include<vector>
#include<cmath>
FILE *f=fopen("gfact.in","r");
FILE *g=fopen("gfact.out","w");
using namespace std;
struct prim
{
int numb;
int cnt;
prim()
{
numb=cnt=0;
}
}expower[205];
int nr_div;
long long p,q,Answer;
void decom ( int number )
{
for(int i(2) ; i <= sqrt( number ) ; ++i )
{
int count(0);
if(!number%i){
++nr_div;
while( ! number%i )
{
number/=i;
++count;
}
expower[nr_div].numb=i;
expower[nr_div].cnt=count;
}
}
if( number != 1)
{
expower[++nr_div].cnt=1;
expower[nr_div].numb=number;
}
}
bool check ( int number )
{
bool ok=true;
for(int i(1) ; i <= nr_div ; ++i )
{
int aux=number;
int count(0);
while( aux >= expower[i].numb )
{
count+=aux/expower[i].numb;
aux/=expower[i].numb;
}
if( count < expower[i].cnt)
ok = false;
}
return ok;
}
void Solve ( void )
{
for(int i(1) ; i <= nr_div ; ++i )
expower[i].cnt*=q;
long long left(2),right(p*q);
while ( left <= right )
{
long long mid=(left+right)>>1;
if( check (mid) )
{
Answer=mid;
right=mid-1;
}
else
left=mid+1;
}
}
void Write ( void )
{
fprintf(g,"%d",Answer);
fclose(g);
}
int main ( void )
{
fscanf(f,"%d%d",&p,&q);
fclose(f);
decom(p);
Solve();
Write();
return 0;
}