Cod sursa(job #1101111)
Utilizator | Data | 7 februarie 2014 22:26:18 | |
---|---|---|---|
Problema | GFact | Scor | 35 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.56 kb |
#include<stdio.h>
#include<math.h>
struct gfact
{
int x,y;
};
gfact f[20];
int p,q,d,lim,num,n,s,sol,csol,i;
int main()
{
freopen("gfact.in","r",stdin);
freopen("gfact.out","w",stdout);
scanf("%d%d",&p,&q);
d=2;
lim=sqrt(p);
while(d<=lim && p!=1)
{
num=0;
while(p%d==0)
{
++num;
p/=d;
}
if(num!=0)
{
f[++n].x=d;
f[n].y=num*q;
s+=f[n].y;
}
++d;
}
if(p!=1)
{
f[++n].x=d;
f[n].y=q;
s+=f[n].y;
}
for(sol=2;;++sol)
{
csol=sol;
d=2;
lim=sqrt(csol);
while(d<=lim && csol!=1)
{
num=0;
while(csol%d==0)
{
++num;
csol/=d;
}
if(num!=0)
{
for(i=1;i<=n;++i)
if(f[i].x==d)
{
if(f[i].y!=0)
{
if(f[i].y>=num)
{
f[i].y=f[i].y-num;
s=s-num;
}
else
{
f[i].y=0;
s=s-f[i].y;
}
}
break;
}
}
++d;
}
if(csol!=1)
{
for(i=1;i<=n;++i)
if(f[i].x==csol)
{
if(f[i].y!=0)
{
if(f[i].y>=1)
{
f[i].y=f[i].y-1;
s=s-1;
}
else
{
f[i].y=0;
s=s-f[i].y;
}
}
break;
}
}
if(s==0)
{
printf("%d\n",sol);
return 0;
}
}
return 0;
}