Pagini recente » Cod sursa (job #783763) | Cod sursa (job #828291) | Cod sursa (job #172929) | Cod sursa (job #466830) | Cod sursa (job #2810782)
#include <fstream>
using namespace std;
ifstream cin("frac.in");
ofstream cout("frac.out");
long long prime[70000],k=0;
long long MaiMicCaAPrimCuB(long long a) {
long long ans = 0;
for(long long mask = 0; mask < (1 << k); mask++) {
long long cnt = 0,prod = 1;
for(long long j = 0; j < k; j++) {
if((1 << j) & mask) {
cnt++;
prod *= prime[j];
}
}
ans += ((cnt & 1) ? -1 : 1) * (a / prod);
}
return ans;
}
int main() {
long long last,a,b,st=1,dr=(1LL<<61),mid;
cin>>a>>b;
//cout<<a<<" "<<b<<endl;
for(long long j = 2; j * j <= a; j++) {
//cout<<a<<" "<<j<<endl;
if(a % j == 0) {
prime[k] = j;
k++;
}
while(a % j == 0)
a /= j;
}
if(a > 1) {
prime[k] = a;
k++;
}
//cout<<k<<endl;
while(st<dr){
mid=(st+dr)/2;
//cout<<mid<<endl;
if(MaiMicCaAPrimCuB(mid)>b)
dr=mid-1;
else if(MaiMicCaAPrimCuB(mid)<b)
st=mid+1;
else if(MaiMicCaAPrimCuB(mid)==b){
last=mid;
dr=mid-1;
}
}
cout<<last;
return 0;
}