Pagini recente » Istoria paginii utilizator/andreeachitu | Monitorul de evaluare | Cod sursa (job #605600) | Cod sursa (job #1587624) | Cod sursa (job #2613305)
#include <fstream>
using namespace std;
ifstream f("frac.in");
ofstream g ("frac.out");
long long c[51];
int main()
{
long long n,p;
f>>n>>p;
int k=0;
for(int i=2; i*i<=n; i++)
if(n%i==0)
{
while(n%i==0)
n/=i;
c[++k]=i;
}
if(n!=1)
c[++k]=n;
long long in=1,fin=1LL<<61;
while(in<=fin)
{
long long r, m=(in+fin)/2;
r=m;
for(int i=1; i<(1<<k); ++i)
{
long long pr=1;
for(int j=0; j<=k; ++j)
if(((1<<j) & i)>0)
pr*=-c[j+1];
r+=m/pr;
}
if(r<p)
in=m+1;
else
fin=m-1;
}
g<<in;
return 0;
}