Nu aveti permisiuni pentru a descarca fisierul grader_test2.in
Cod sursa(job #354158)
| Utilizator | Data | 7 octombrie 2009 11:30:52 | |
|---|---|---|---|
| Problema | GFact | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.02 kb |
#include<cstdio>
const long long MAXIM=(long long)1<<60;
long long p,q,n,a[1001],b[1001];
void dfp(long long m)
{
for(long long i=2;i*i<=m;i++)
{
if(m%i==0)
{
++n;
a[n]=i;
}
while(m%i==0)
{
++b[n];
m/=i;
}
}
if(m!=1)
{
++n;
a[n]=m;
b[n]=1;
}
}
bool ver(long long x, long long y, long long z)
{
long long nrfac=0;
while(x)
{
nrfac+=x/y;
x/=y;
}
if(nrfac>=z)
return true;
return false;
}
bool ok(long long x)
{
for(long long i=1;i<=n;i++)
if(ver(x,a[i],b[i]*q)==false)
return false;
return true;
}
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
long long i,pas;
scanf("%lld%lld",&p,&q);
dfp(p);
pas=MAXIM;
for(i=1;pas;pas>>=1)
if(!ok(i+pas))
i+=pas;
printf("%lld ",i+1);
return 0;
}
