Pagini recente » Cod sursa (job #768935) | Cod sursa (job #1588402) | Cod sursa (job #68922) | Cod sursa (job #808498) | Cod sursa (job #3287752)
/*
____ ___ _ ___ ____ _
/ ___| / _ \| | |_ _/ ___| / \
\___ \| | | | | | | | / _ \
___) | |_| | |___ | | |___ / ___ \
|____/ \___/|_____|___\____/_/ \_\
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define int long long int
#define pii pair<int,int>
const int NMAX = 2e5+9;
const int MOD = 1e9+7;
int binpow(int n, int k)
{
if (k==0)
{
return 1;
}
int x=binpow(n,k/2)%MOD;
if (k%2==0)
{
return x*x%MOD;
}
else
{
return x*x%MOD*n%MOD;
}
}
int a,b,i,j;
int st,dr,mij;
vector<int>divs;
int numberdoubleprimes(int x)
{
int cntr=divs.size();
int answer=0;
for (int mask=1; mask<(1<<cntr); mask++)
{
int cnr=1;
for (int i=0; i<cntr; i++)
{
if ((1<<i)&mask)
{
cnr*=divs[i];
}
}
if (__builtin_popcount (mask)%2==1)
{
answer+=x/cnr;
}
else
{
answer-=x/cnr;
}
}
return x-answer;
}
ifstream fin ("frac.in");
ofstream fout ("frac.out");
#define cin fin
#define cout fout
void run_case ()
{
cin>>a>>b;
st=0,dr=1e18;
int d=2;
while (a>1)
{
int p=0;
while (a%d==0)
{
p++;
a/=d;
}
if (p)
{
divs.pb (d);
}
d++;
if (d*d>a && a>1)
{
d=a;
}
}
while (dr-st>1)
{
int mij=(st+dr)/2;
if (numberdoubleprimes (mij)>=b)
{
dr=mij;
}
else
{
st=mij;
}
}
cout<<dr;
}
signed main ()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL),cout.tie (NULL);
int teste;
teste=1;
while (teste--)
{
run_case();
}
}