Pagini recente » Cod sursa (job #2284965) | Cod sursa (job #25061) | Cod sursa (job #2084610) | Cod sursa (job #2550174) | Cod sursa (job #1459111)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char a[1000005];
int prime[1000005];
long long t[1000005];
void ciur()
{
int i, j;
for (i = 2; i <= sqrt(1000000); i++){
if (!a[i]){
for (j = i*i; j <= 1000000; j += i)
a[j] = 1;
}
}
}
void prim()
{
int i, j = 0;
for (i = 2; i <= sqrt(1000000); i++)
if (!a[i])
{
prime[j] = i;
j++;
}
}
void print()
{
int i;
for (i = 0; i <= 20; i++)
printf("prime[%d]=%d\n", i, prime[i]);
}
void totem()
{
int i, j, k, e;
t[1]=t[2]=1;
t[3]=2;
for (i = 4; i <= 1000000; i++)
{
if (!a[i])
t[i] = i-1;
else
{
//for (j = 2; j <= sqrt(i); j++)
j = 0;
while(prime[j])
{
if (i == (i/prime[j])*prime[j])
{
e = 1;
k = i/prime[j];
while (k == (k/prime[j])*prime[j])
{
k/=prime[j];
e*=prime[j];
}
t[i] = (prime[j] - 1)*e*t[k];
break;
}
j++;
}
}
}
}
int main()
{
int n, i;
long long result = 1l;
FILE *f=fopen("fractii.in","r");
fscanf(f,"%d",&n);
ciur();
prim();
totem();
for (i = 2; i <= n; i++)
result += 2*t[i];
FILE *out=fopen("fractii.out","w");
fprintf(out,"%lld", result);
return 0;
}