Pagini recente » Cod sursa (job #2345919) | Cod sursa (job #2734263) | Cod sursa (job #3246708) | Cod sursa (job #2869545) | Cod sursa (job #92316)
Cod sursa(job #92316)
#include <stdio.h>
#include <string.h>
using namespace std;
bool prim[1000000];
int n;
long long sum;
void citire()
{
freopen("fractii.in","r",stdin);
scanf("%d",&n);
}
long long totient(int x)
{
float rez=x;
if (prim[x]) return (x-1);
else
{
if ( x % 2 == 0) rez = rez / 2;
for(int i=3;i<=x/2;i+=2)
if (prim[i] && x % i ==0)
rez=rez-rez/i;
}
return rez;
}
void ciur()
{
memset(prim,true,sizeof(prim));
prim[2]=true;
for (int i=4;i<1000000;i+=2)
prim[i]=false;
for (int i=3;i<1000000;i+=2)
{
if (prim[i])
for(int j=2*i;j<1000000;j+=i)
prim[j]=false;
}
}
void scrie()
{
freopen("fractii.out","w",stdout);
printf("%lld",sum);
fclose(stdout);
}
int main()
{
citire();
sum = 1;
ciur();
for (int i=2;i<=n;i++)
sum += 2*totient(i);
scrie();
//printf("%d",totient(4));
return 0;
}