Cod sursa(job #1101111)

Utilizator TBLam99Tran Bach Lam TBLam99 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;
}