Pagini recente » Monitorul de evaluare | Cod sursa (job #513768) | Cod sursa (job #1792858) | Istoria paginii runda/ioi_2020 | Cod sursa (job #81385)
Cod sursa(job #81385)
#include<stdio.h>
#define N 1000011
int euler[N];
char ciur[N];
void ciurul(int n){
ciur[0]=ciur[1]=1;
for(int i=2;i*i<=n;++i)
if(!ciur[i])
for(int j=i+i;j<=n;j+=i)
ciur[j]=1;
}
void proba(int n){
for(int i=0;i<=n;++i)
printf("(%d,%d) ",i,(int)ciur[i]);
}
int divizor(int n){
for(int i=2;i*i<=n;++i)
if(ciur[i]==0&&n%i==0)
return i;
return n;
}
int calcul(int n){
int s=0,i,x;
euler[0]=euler[1]=1;
for(i=2;i<=n;++i)
{
if(!ciur[i])
euler[i]=i-1;
else{
x=divizor(i);
if(i/x%x==0)
euler[i]=euler[i/x]*x;
else
euler[i]=euler[i/x]*(x-1);
}
s+=euler[i];
}
s*=2;
return ++s;
}
int main(){
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
int n,x;
scanf("%d",&n);
ciurul(n);
//proba(n);
x=calcul(n);
printf("%d\n",x);
fclose(stdin);
fclose(stdout);
return 0;
}