Pagini recente » Cod sursa (job #3266920) | Cod sursa (job #508594) | Cod sursa (job #1925054) | Cod sursa (job #214495) | Cod sursa (job #883858)
Cod sursa(job #883858)
#include<cstdio>
#include<vector>
#define ll long long
using namespace std;
ll n,p,i,left,right,nf,j,mid,sol,SOL;
vector<ll>v[20];
vector<ll>::iterator it;
int main()
{
freopen("frac.in","r",stdin);
freopen("frac.out","w", stdout);
scanf("%lld %lld ", &n, &p);
for(i=2;i*i<=n&&n!=1;i++)
if(n%i==0)
{
for(;n%i==0;n/=i);
for(j=nf;j>=0;j--)
for(it=v[j].begin();it!=v[j].end();it++)
v[j+1].push_back((*it)*i);
nf++;
}
if(n>1)
{
for(j=nf;j>=0;j--)
for(it=v[j].begin();it!=v[j].end();it++)
v[j+1].push_back((*it)*n);
nf++;
}
left=1;
right=(long long)1<<62;
for(;left<=right;)
{
mid=(left+right)/2;
sol=mid;
for(j=1;j<=nf;j+=2)
for(it=v[j].begin();it!=v[j].end();it++)
sol-=mid/(*it);
for(j=2;j<=nf;j+=2)
for(it=v[j].begin();it!=v[j].end();it++)
sol+=mid/(*it);
if(sol>=p){SOL=mid;right=mid-1;}
else{left=mid+1;}
}
printf("%lld", SOL);
return 0;
}