Pagini recente » Rezultatele filtrării | Borderou de evaluare (job #2504342) | Cod sursa (job #49542)
Cod sursa(job #49542)
#include<stdio.h>
int nr[1000020],prim[90000];
int main(){
FILE*in=fopen("fractii.in","r");
FILE*out=fopen("fractii.out","w");
int n,i,j,pr,m,i1,k,p,u,mij;
fscanf(in,"%d",&n);
if(n==1){
fprintf(out,"1\n");
return 0;
}
if(n==2){
fprintf(out,"3\n");
return 0;
}
i=4;
while(i<=n+20){
nr[i]=1;
i=i+2;
}
for(i=3;i<=n+20;i=i+2){
pr=1;
if(nr[i]==0){
j=i+i;
while(j<=n+20){
nr[j]=1;
j=j+i;
}
}
}
prim[0]=2;
j=1;
for(i=3;i<=n+20;i=i+2){
if(nr[i]==0){
prim[j]=i;
j++;
}
}
long long s=0;
m=0;
k=0;
for(i=2;i<=n;i++){
if(i<prim[m]){
j=0;
pr=i;
i1=i;
while((prim[j]*prim[j]<=i)&&(i1>1)){
if(i%prim[j]==0){
pr=(pr/prim[j])*(prim[j]-1);
while(i1%prim[j]==0)
i1=i1/prim[j];
if(i1>1){
p=1;
u=m;
while(p<u){
mij=(p+u)/2;
if(i1<=prim[mij])
u=mij;
else
p=mij+1;
}
if(i1==prim[p]){
pr=(pr/prim[p])*(prim[p]-1);
i1=i1/prim[p];
}
}
}
j++;
}
s=s+pr;
}
if(i==prim[m]){
s=s+prim[m]-1;
m++;
}
}
s=1+2*s;
fprintf(out,"%lld\n",s);
return 0;
}