Pagini recente » Cod sursa (job #732914) | Cod sursa (job #2854386) | Cod sursa (job #2021766) | Cod sursa (job #163054) | Cod sursa (job #812714)
Cod sursa(job #812714)
#include<fstream>
#include<math.h>
using namespace std;
long long n,p,fac[30],nr=1;
bool v[12000001];
void desc()
{
long long d,e,x=n,lim=sqrt((double)n);
d=2;
while(x>1&&d<=lim)
{
e=0;
while(x%d==0)
{
x=x/d;
e++;
}
if(e>0)
{
fac[nr]=d;
nr++;
}
d++;
}
if(x>1)
{
fac[nr]=x;
nr++;
}
}
long long ind_euler()
{
long long pr=n,i;
for(i=1;i<=nr-1;i++)
pr=pr/fac[i]*(fac[i]-1);
return pr;
}
long long ciur()
{
long long x=n,i,j,numarator=0;
for(i=1;i<=nr-1;++i)
for(j=fac[i];j<=x;j+=fac[i])
v[i]=true;
for(i=1;i<=n;i++)
if(v[i]==false)
{
numarator++;
if(numarator==p)
return numarator;
}
}
int main()
{
ifstream f("frac.in");
ofstream g("frac.out");
f>>n>>p;
desc();
long long i,ciclu;
i=ind_euler();
ciclu=p/i;
p=p%i;
if(p==0)
p=i;
i=ciur();
long long num=i+ciclu*n;
g<<num;
}