Pagini recente » Cod sursa (job #2621240) | Cod sursa (job #1440164) | Cod sursa (job #1451650) | Cod sursa (job #1798769) | Cod sursa (job #243491)
Cod sursa(job #243491)
#include <stdio.h>
#define Nmax 1000001
int N, c[Nmax], rez, i;
int euler(int);
int putere(int b, int e);
int main()
{
fscanf(fopen("fractii.in", "r"), "%d", &N);
c[2] = 1; c[3] = 2;
for ( i = 4; i<=N; ++i )
{
c[i] = euler(i);
rez+=c[i];
}
rez+=3;
fprintf(fopen("fractii.out", "w"), "%d", rez*2+1);
//for (i = 1; i<=N; ++i) printf("%d ", c[i]);
return 0;
}
int euler(int x)
{
int i, cnt, lim = x >> 1, temp = 1, pr=0;
for (i = 2; i<=lim && x!=1 ; ++i)
{
for ( cnt = 0; !(x % i); ++cnt, x/=i );
if (cnt && !pr && x == 1) return (i-1)*putere(i,cnt-1);
if (cnt) pr = 1;
if (cnt) temp*=c[putere(i,cnt)];
}
if (x!=1) return x-1;
return temp;
}
int putere(int b, int e)
{
if (e == 2) return b*b;
if (e == 1) return b;
int temp = putere(b,e / 2);
if (e&1) return temp*temp*b;
else return temp*temp;
}