Pagini recente » Cod sursa (job #138058) | Cod sursa (job #180239) | Cod sursa (job #1944693) | Cod sursa (job #663337) | Cod sursa (job #2629366)
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("frac.in");
ofstream out("frac.out");
#define ll long long
#define MAX_P 1000000
ll A,B,M,fact[30];
void solve(){
ll t = 0 ,d = 2;
while(B > 1){
if(B % d == 0){
fact[++t] = d;
while (B % d == 0)
B /= d;
}
if(d > sqrt(B) && B > 1){
fact[++t] = B;
B = 1;
}
if(d % 2) d++;
else d+=2;
}
ll dr=1ll<<61 ,st=0;
while(st<=dr){
ll mid=(st+dr)/2,ans;
ans=mid;
for(int i = 1;i < (1 << t);i++){
ll prod = 1;
for(int j = 0;j < t;j++)
if((1 << j) & i){
prod = prod * -fact[j + 1];
}
ans+= mid/prod;
}
if( ans < A)
st =mid+1;
else
dr=mid-1;
}
out <<st;
}
int main(){
in >>B>>A;
solve();
return 0;
}