Pagini recente » Cod sursa (job #720062) | Cod sursa (job #140996) | Cod sursa (job #2465500) | Cod sursa (job #2654020) | Cod sursa (job #307167)
Cod sursa(job #307167)
#include<stdio.h>
#include<stdlib.h>
int n,nr;
char prim[1000003];
int prime[1000000],nr_prime;
void eratostene(int n){
int i,j,max;
for(i=2;i<=n;++i)
if(prim[i] == 0){
max = n/i;
for(j=2;j<=max;++j)
prim[j*i]=1;
}
for(i=1;i<=n;++i)
if(prim[i] == 0)
prime[nr_prime++] = i;
prime[nr_prime]=0x7FFFFFFF;
}
void read(void){
FILE *f=fopen("fractii.in","r");
fscanf(f,"%d",&n);
fclose(f);
}
void scrie(void){
FILE *f=fopen("fractii.out","w");
fprintf(f,"%d\n",nr);
fclose(f);
}
int cmmdc(int a,int b){
if(a == 0)
return b;
if(b == 0)
return a;
if(a>b)
a = a%b;
else
b = b%a;
return cmmdc(a,b);
}
void numara1(void){
int i,j;
nr=1;
for(i=1;i<=n;++i)
for(j=1;j<i;++j)
if(cmmdc(i,j) == 1)
nr += 2;
}
int eulerPhi(int k){
int m=k,i=1;
while(prime[i] <= k){
if(k % prime[i] == 0){
m = m/prime[i];
m *= (prime[i] - 1);
}
++i;
}
return m;
}
void numara(void){
int i;
nr=1;
for(i=2;i<=n;++i)
nr += 2*eulerPhi(i);
}
int main(void){
read();
eratostene(n);
numara();
scrie();
return 0;
}