Pagini recente » Cod sursa (job #550624) | Cod sursa (job #2986719) | Cod sursa (job #653434) | Cod sursa (job #552186) | Cod sursa (job #2070485)
#include<cstdio>
using namespace std;
long long fact[1005];
int nrfact;
void descompunere(long long n){
if(n%2==0){
fact[++nrfact]=2;
while(n%2==0)
n/=2;
}
for(int d=3;d*d<=n && n>1;d++)
if(n%d==0){
fact[++nrfact]=d;
while(n%fact[nrfact]==0)
n/=fact[nrfact];
}
if(n>1)
fact[++nrfact]=n;
}
bool cautare(long long prod){
for(int i=1;i<=nrfact;i++)
if(fact[i]==prod)
return 1;
return 0;
}
int main(){
freopen("frac.in","r",stdin);
freopen("frac.out","w",stdout);
long long n,p,valoare=1;
scanf("%lld%lld", &n, &p);
descompunere(n);
for(int i=1;i<=nrfact;i++)
valoare*=fact[i];
long long indice_euler=valoare;
for(int i=1;i<=nrfact;i++){
indice_euler*=fact[i]-1;
indice_euler/=fact[i];
}
long long cat=p/indice_euler,rest=p%indice_euler;
bool ciur[valoare+5];
for(int i=0;i<=valoare;i++)
ciur[i]=0;
for(int i=1;i<=nrfact;i++)
for(int j=1;j*fact[i]<=valoare;j++)
ciur[j*fact[i]]=1;
long long nr=0,element=1;
if(rest==0)
rest=indice_euler,cat--;
while(nr<rest){
if(ciur[element]==0)
nr++;
element++;
}
element--;
printf("%lld", element+valoare*cat);
return 0;
}