Pagini recente » Cod sursa (job #2284370) | Cod sursa (job #2910625) | Cod sursa (job #2142670) | Cod sursa (job #3124782) | Cod sursa (job #368360)
Cod sursa(job #368360)
#include<stdio.h>
long long n,p,a[1000],ind=0,per,lo=0,hi,mid;
void getdiv();
void detper();
int verif(long long x);
long long cautbin();
int main()
{
FILE*f=fopen("frac.in","r");
fscanf(f,"%d%d",&n,&p);
fclose(f);
getdiv();
detper();
while(p>per)
{p-=per;lo+=n;}
FILE*g=fopen("frac.out","w");
fprintf(g,"%d",cautbin());
fclose(g);
return 0;
}
void getdiv()
{
long long x=n,i=2;
for(i;x>1;++i)
if(x%i==0)
{
a[ind]=i;
++ind;
while(x%i==0)x/=i;
}
}
void detper()
{
per=1;
long long i=2;
for(i;i<n;++i)
if(verif(i))++per;
}
int verif(long long x)
{
long long i;
int ok=1;
for(i=0;i<ind&&ok;++i)
if(x%a[i]==0)ok=0;
return ok;
}
long long cautbin()
{
hi=lo+n;
while(per>1)
{
mid=lo+(hi-lo)/2;
per/=2;
if(per==1)continue;
if(p<=per)hi=mid-1;
else lo=mid+1;
}
int ok=0;
for(lo;lo<=hi&&!ok;++lo)
if(verif(lo))ok=1;
return lo-1;
}