Pagini recente » Cod sursa (job #726899) | Cod sursa (job #614858) | Borderou de evaluare (job #367059) | Cod sursa (job #3210217) | Cod sursa (job #1915601)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("frac.in");
ofstream g("frac.out");
long long n,div[105],k,nrc;
void descompunere_n()
{
long long d,p; p=0;
while(n%2==0){p++; n/=2;} d=3; if(p!=0)div[++nrc]=2;
while(d*d<=n&&n>1){p=0; while(n%d==0){p++; n/=d;} if(p!=0)div[++nrc]=d; d+=2; }
if(n!=1)div[++nrc]=n;
}
void cautare_binara()
{
long long st,mij,dr,aux,i,val,j;
st=1; dr=(1LL<<61);
while(st<=dr)
{
mij=(st+dr)/2;
aux=mij;
for(i=1;i<(1<<nrc);i++)
{
val=1;
for(j=0;j<=nrc;j++)
if((i&(1<<j))>0)
val*=-div[j+1];
aux+=mij/val;
}
if(aux<k)st=mij+1; else dr=mij-1;
}
g<<st;
}
int main()
{
f>>n>>k;
descompunere_n();
cautare_binara();
f.close();
g.close();
return 0;
}