Pagini recente » Cod sursa (job #625458) | Cod sursa (job #212506) | Cod sursa (job #517556) | Cod sursa (job #850344) | Cod sursa (job #262299)
Cod sursa(job #262299)
#include<stdio.h>
#define N 1000001
char c[N];
long int n1,num,v[N],poz;
long int descompun(int n)
{
float p=n;
poz=0;
for (int i=2; i*i<=n;++i)
{
int ok=0;
while (n%i==0){n/=i; ok=1;}
if (ok) {p*=(float)(i-1)/i;v[++poz]=i;}
}
if (n>1) {p*=(float)(n-1)/n; v[++poz]=n;}
long int s=p;
//s=s+(n1-n);
return s;
}
void ciur(int n)
{
long int d=2;
while (d*d<=n)
{
if (!c[d]) for (int i=d*d; i<=n; i+=d)c[i]=1;
++d;
}
}
void caut(int n)
{
for (int i=n+1; i<=n1; ++i)
{
int ok=1;
for (int j=1; j<=poz; ++j)
if(i%v[j]==0){ok=0; break;}
if (ok) ++num;
}
}
void citire()
{
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%ld",&n1);
ciur (n1);
num=n1;
if (n1%2) num+=n1/2+1;
else
num+=n1/2;
for (int i=3; i<=n1; ++i)
{
if (!c[i])
num+=n1-(n1/i);
else
{
num+=descompun (i);
caut(i);
}
}
printf("%ld",num);
}
int main()
{
citire();
return 0;
}