Pagini recente » Cod sursa (job #2493170) | Cod sursa (job #2036050) | Cod sursa (job #1818285) | Cod sursa (job #2296692) | Cod sursa (job #2045248)
#include <fstream>
using namespace std;
long long a,b,p,e,d,k,st,dr,mid,i,sol,ap,prod;
long long v[30],w[30];
ifstream fin ("frac.in");
ofstream fout ("frac.out");
int main (){
fin>>a>>b;
/// descompunem pe a in factori primi
p = a;
d = 2;
while (p != 1 && d*d <= p){
e = 0;
while (p % d == 0){
p/=d;
e++;
}
if (e != 0)
v[++k] = d;
d++;
}
if (p != 1)
v[++k] = p;
st = 1;
dr = 1000000000000000000;
while (st <= dr){
mid = (st+dr)/2;
//******************
for (i=0;i<=k;i++)
w[i] = 0;
sol = 0;
while (w[0] == 0){
i = k;
while (w[i] == 1 && i>0){
w[i] = 0;
i--;
}
w[i] = 1;
if (w[0] == 1)
break;
ap = 0;
prod = 1;
for (i=1;i<=k;i++)
if (w[i] == 1){
prod *= v[i];
ap++;
}
if (ap % 2 == 0)
sol -= mid/prod;
else
sol += mid/prod;
}
if (mid - sol < b)
st = mid + 1;
else
dr = mid-1;
}
fout<<st;
return 0;
}