Cod sursa(job #816633)

Utilizator avaspataruAva Spataru avaspataru Data 17 noiembrie 2012 12:56:00
Problema Frac Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
long long l1,l2,x,cat;
int v[110001],n,p,c,pp,i,j,d,pp2;
int main()
{
    freopen("frac.in","r",stdin);
    freopen("frac.out","w",stdout);
scanf("%d%d",&n,&p);
c=0;d=2;
while(n!=1)
    {pp=0;
    while(n%d==0)
        {n/=d;pp=1;}
    if(pp==1)
        {c++;v[c]=d;}
    d++;
    }
l1=1;
l2=(long long)1<<61;
pp=0;
while(l1<l2&&pp==0)
    {x=(l1+l2)/2;
    //aflu al-cate-lea este x
    cat=x;
    pp2=1;
    for(i=1;i<=c;i++)
        {cat=cat-(x/v[i]);
        if(x%v[i]==0)
            pp2=0;
        }
    for(i=1;i<c;i++)
        for(j=i+1;j<=c;j++)
            cat=cat+(x/(v[i]*v[j]));

    if(cat==p)
        if(pp2==1)
            pp=1;
        else
            l2=x;

    else
        if(p<cat)
            {l2=x;}
        else
            l1=x;

    }
printf("%lld",x);
return 0;
}