Cod sursa(job #172201)

Utilizator razvanelu99Razvan Andrus razvanelu99 Data 5 aprilie 2008 22:12:34
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<fstream.h>
#include<math.h>
int v[1000010];
long prim[100000],tot[1000010];
int main()
{
ifstream f("fractii.in");
ofstream g("fractii.out");
long i,n,j,l=0,k,e,a;
f>>n;

for (i=4;i<=n;i+=2) v[i]=1;
for (i=3;i<=sqrt(n);i+=2)
   {
   v[i-1]=1;
   if (v[i]==0)
     {
     for (j=i*i;j<=n;j+=i)  v[j]=1;
     }
   }
if (n%2==0) v[n]=1;
v[2]=0;
for (i=2;i<=n;i++) if (v[i]==0) prim[++l]=i;
tot[1]=1;
for (i=2;i<=n;i++)
   {
   if (!v[i]) tot[i]=i-1;
   else
      {
      for (j=1;j<=l;j++)
	 {
	 if (i%prim[j]==0)
	   {
	   k=prim[j];
	   a=i;
	   e=0;
	   while (a%k==0)
		{
		e++;
		a/=k;
		}
	   break;
	   }
	 }
      tot[i]=(k-1)*(i/(a*k))*tot[a];
      }
   }
long long s=0;
for (i=2;i<=n;i++) s+=tot[i];
s=s*2+1;
g<<s;
f.close();
g.close();
return 0;
}