Pagini recente » Cod sursa (job #3145512) | Cod sursa (job #2883107) | Cod sursa (job #2750726) | Cod sursa (job #2736722) | Cod sursa (job #122401)
Cod sursa(job #122401)
#include <stdio.h>
#define DIM 100001
char v[DIM];
long int p[DIM];
long long tot[DIM];
long long n,i,j,k,pp,nn,sum,x,e,a;
int main(){
FILE *f = fopen("fractii.in","r");
fscanf(f,"%lld",&n);
// scanf("%d",&n);
fclose(f);
for (i=1;i<=n;i++)
v[i]=0;
for (i=2;i<=n;i++)
for (j=2*i;j<=n;j+=i)
v[j]=1;
k=0;
for (i=2;i<=n;i++)
if (v[i]==0)
p[++k]=i;
// printf("%d ",i);
// printf("\n");
//t(p^e) = (p - 1) * p^(e - 1), p numar prim (din definitie)
//si
//daca p numar prim, p NU divide a,
//t(p^e * a) = t(p^e) * t(a) = (p - 1) * p^(e - 1) * t(a)
tot[1]=1;
tot[2]=1;
for (i=3;i<=n;i++){
/* if (v[i]==0){
tot[i]=2*(i-1);
continue;
}*/
for (j=1;(p[j]<=i)&&(j<=k);j++){
if (i%p[j]==0){
e=0; a=i;
while (a%p[j]==0) {
e++;
a/=p[j];
}
if (a==1) {
tot[i]=(p[j]-1)*(i/p[j]);
} else {
tot[i]=tot[a]*tot[i/a];
}
break;
}
}
}
sum=1;
for (i=2;i<=n;i++)
sum+=(2*tot[i]);
/* sum=0;
for (x=1;x<=n;x++){
pp=1;
nn=x;
for (i=1;(p[i]<=x)&&(i<=k);i++)
if (x%p[i]==0) {
nn/=p[i];
pp*=(p[i]-1);
}
pp*=nn;
sum+=pp;
}
sum=sum*2-1;*/
FILE *g = fopen("fractii.out","w");
fprintf(g,"%lld",sum);
fclose(g);
return 0;
}