Pagini recente » Cod sursa (job #2640435) | Cod sursa (job #1616130) | Cod sursa (job #1165281) | Cod sursa (job #964968) | Cod sursa (job #812140)
Cod sursa(job #812140)
#include <stdio.h>
#include<string.h>
#include <math.h>
#define ll long long
#define MAX_P1 10000000
ll x ,y,fact[30];
ll fprim[20000007];
bool prim[MAX_P1];
void ciur(ll MAX_P)
{
prim[1]=1;
prim[2]=0;
for (ll i=4;i<=MAX_P;i+=2)
prim[i]=1;
fprim[++fprim[0]]=2;
for (ll i=3;i<=sqrt(MAX_P);i+=2)
if (prim[i]==0)
{
for (ll j=i*2;j<=MAX_P;j+=i)
prim[j]=1;
fprim[++fprim[0]]=i;
}
}
ll pinex(ll A,ll B )
{
ll t=0,d=0;
while (B>1)
{
d++;
if (B%fprim[d]==0)
{
fact[++t]=fprim[d];
while (B%fprim[d]==0)
B/=fprim[d];
}
if (fprim[d]>sqrt(B)&&B>1)
{
fact[++t]=B;
B=1;
}
}
ll sol=A;
for (ll i=1;i<(1<<t);++i)
{
ll nr=0,prod=1;
for (ll j=0;j<t;++j)
if ((1<<j)&i)
{
prod=1LL*prod*fact[j + 1];
nr++;
}
if (nr%2)
nr=-1;
else
nr=1;
sol+=1LL*nr*A/prod;
}
return sol;
}
ll cb()
{
ll st=1,dr=100,med=0;
while (st<=dr)
{
med=st+(dr-st)/2;
if (pinex(med,x)<y)
st=med+1;
else
dr=med-1;
}
return med;
}
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
scanf("%lld %lld",&x,&y);
ciur(y);
printf("%lld",cb());
return 0;
}