Pagini recente » Cod sursa (job #1760927) | Cod sursa (job #2806929) | Cod sursa (job #98409) | Cod sursa (job #2970949) | Cod sursa (job #819853)
Cod sursa(job #819853)
#include <stdio.h>
long long fact[100];
int cf;
void descompune(long long x)
{
if(x%2==0)
{
fact[++cf]=2;
while(x%2==0)
x/=2;
}
long long d=3;
while(x!=1)
{
if(x%d==0)
{
fact[++cf]=d;
while(x%d==0)
x/=d;
}
d+=2;
}
}
long long n;
long long subm(long long p)
{
int b;
long long sol=p;
long long prod;
int cate;
for(long long i=1;i<(long long)1<<cf;i++)
{
prod=1;
cate=0;
for(b=0;b<cf;b++)
{
if((1<<b)&i)
{
cate++;
prod*=fact[b+1];
}
}
if(cate%2==1)
sol-=p/prod;
else
sol+=p/prod;
}
return sol;
}
int p;
long long rez;
void bsearch(long long s,long long d)
{
if(s>d)
return;
else
{
long long mij=(s+d)/((long long)2);
long long x=subm(mij);
if(x==p)
rez=mij;
if(x<p)
bsearch(mij+1,d);
else
bsearch(s,mij-1);
}
}
int main()
{
scanf("%lld%lld",&n,&p);
descompune(n);
bsearch(1,(long long)1<<61);
printf("%lld",rez);
return 0;
}