Pagini recente » Cod sursa (job #2655752) | Cod sursa (job #969413) | Cod sursa (job #1524116) | Cod sursa (job #2225224) | Cod sursa (job #466870)
Cod sursa(job #466870)
#include <fstream>
#include<windows.h>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int D[1000][2];
int B,P,i,Q,K,st,dr,fact,rez;
bool fnd;
int factori(long long X,long val)
{
int rez = 0;
while(X)
{
rez+=X/val;
X/=val;
}
return rez ;
}
int main()
{
in>>P>>Q;
D[1][0] = 2;
int t = 1;
//factorizarea in sqrt(P)
while(P%2==0) D[1][1]+=Q,P/=2;
for(i=3;i*i<=P&&P!=1;i+=2)
{
if(P%i==0)
{
D[++t][0]=i;
while(P%i==0)
{
D[t][1]+=Q;
P/=i;
}
}
}
if(P!=1)
D[++t][0] = P,D[t][1]=Q;
for(i=1;i<=t;i++)
{
//caut si retin cel mai mare Bi a.i Bi !%Di == 0
st = 0;
dr = D[i][1];
fnd = false;
B=D[i][0];
while(st<=dr&&fnd==false)
{
K = (st+dr)/2;
B = K*D[i][0];
fact = factori(B,D[i][0]);
if(fact<D[i][1])
st = K+1;
if(fact>D[i][1])
dr = K-1;
if(fact==D[i][1])
fnd = true;
}
if(B>rez)
rez = B;
}
out<<rez;
return 0;
}