Pagini recente » Cod sursa (job #1054817) | Cod sursa (job #217187) | Cod sursa (job #1967522) | Cod sursa (job #684963) | Cod sursa (job #109988)
Cod sursa(job #109988)
#include <stdio.h>
#define N 1000001
int p[N],prim[100000],e[N],nr;
void ciur(int n)
{
int i,j;
for (i=2;i*i<=n;i++)
if (!p[i])
{
for (j=i+i;j<=n;j+=i)
p[j]=1;
prim[nr++]=i;
}
}
int divizor(int k){
for(int i=0;i<nr;++i)
if(k%prim[i]==0)
return prim[i];
return k;
}
long long euler(int n)
{
int i,k;
long long rez=0;
for (i=2;i<=n;i++)
{
if(p[i]){
//caut cel mai mic div prim al lui i
k=divizor(i);
if(i%(k*k)==0)
{
e[i]=k*e[i/k];
}
else
e[i]=(k-1)*e[i/k];
}
else
e[i]=i-1;
rez+=e[i];
}
return rez*2+1;
}
int main()
{
FILE *in,*out;
int n;
in=fopen("fractii.in","r");
out=fopen("fractii.out","w");
fscanf(in,"%d",&n);
ciur(n);
fprintf(out,"%lld",euler(n));
fclose(in);
fclose(out);
return 0;
}