Nu aveti permisiuni pentru a descarca fisierul grader_test2.ok
Cod sursa(job #469689)
| Utilizator | Data | 8 iulie 2010 16:56:09 | |
|---|---|---|---|
| Problema | GFact | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.86 kb |
#include<stdio.h>
#include<math.h>
#define LL long long
long long min=0;
long long q;
LL mult(LL p,LL n)
{
LL num=p,s=0;
while(n)
{
s+=n/num;
n=n/num;
}
return s;
}
long long bin(long long d,long long e)
{
long long m,pozdy=0,st,dr;
st=1;
dr=(long long)(1ll<<61)-1;
while(st<=dr)
{
m=(st+dr)>>1;
if(mult(m,d)>=e)
{
dr=m-1;
pozdy=m;
}
else
st=m+1;
}
return pozdy;
}
void desc(long long p)
{
long long d=2,e,f,a;
e=sqrt(p);
while(d<=e&&p>1)
{
f=0;
while(p%d==0)
{
f++;
p=p/d;
}
if(f)
{
a=bin(d,f*q);
if(a>min)
min=a;
}
d++;
}
if(p>1)
{
a=bin(d,f*q);
if(a>min)
min=a;
}
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
long long p;
scanf("%lld%lld",&p,&q);
desc(p);
printf("%lld",min);
return 0;
}
