Mai intai trebuie sa te autentifici.
Cod sursa(job #161908)
| Utilizator | Data | 18 martie 2008 22:45:10 | |
|---|---|---|---|
| Problema | GFact | Scor | 30 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.91 kb |
#include <stdio.h>
#include <math.h>
#define N 2000000
int v[N];
void descompune(int p)
{
int x=p;
for(int i=2;i<=x;++i)
{
if(p<=1) break;
while(!(p%i))
{
++v[i];
p/=i;
}
}
}
void ridica_la_putere(int p, int q)
{
int i;
for(i=2;i<=p;++i)
if(v[i]!=0)
v[i]*=q;
}
long long solve(int p, int q)
{
int k,i,j=0;
long long max=0;
for(i=2;i<=p;++i)
{
if(v[i]>0)
for(j=i;j<=p*q;j+=i)
{
k=j;
while(!(k%i))
{
--v[i];
k/=i;
}
if(v[i]<=0)
break;
}
if(j>max) max=j;
}
return max;
}
int main()
{
int p,q;
long long rez;
freopen("gfact.in", "r",stdin);
freopen("gfact.out", "w",stdout);
scanf("%d %d", &p, &q);
descompune(p);
ridica_la_putere(p,q);
/*for(int i=2;i<=p;++i)
if(v[i]!=0)
printf("%d %d\n", v[i],i);
printf("\n");*/
rez=solve(p,q);
printf("%lld\n", rez);
return 0;
} 