Cod sursa(job #235978)

Utilizator BlackjackmdsSpataru Madalin Daniel Blackjackmds Data 26 decembrie 2008 13:58:05
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <string.h>
#define NMAX 1000001
FILE *f,*g;

int main()
{
char tag[NMAX];
memset(tag,0,sizeof(tag));
long long s;
long int n,i,j,e,a;
f=fopen("fractii.in","r");
fscanf(f,"%ld",&n);
tag[0]=1;
tag[1]=1;
for(j=4;j<=n;j=j+2) tag[j]=1;
for(i=3;i<=n;i=i+2)
    if(tag[i]==0) for(j=i*i;j<=n;j=j+i)  tag[j]=1;
s=1;
for(i=2;i<=n;i++)
{
if(tag[i]==0) e=i-1;
	 else
	   {a=i;
	    e=1;
	    if(a%2==0)   {  while(a%2==0){a=a/2;e=e*2;}
			    e=e/2;
			 }

	    j=3;
	    while(a!=1)
	   { if(tag[j]==0)        if(a%j==0) {while(a%j==0){a=a/j;e=e*j;}
					     e=e*(j-1)/j;
					    }
	    j=j+2;
	   }
	   }
s=s+2*e;
}
g=fopen("fractii.out","w");
fprintf(g,"%ld",s);
fclose(f);
fclose(g);
return 0;
}