Pagini recente » Cod sursa (job #1026698) | Cod sursa (job #2068978) | Cod sursa (job #2772674) | Cod sursa (job #543306) | Cod sursa (job #308517)
Cod sursa(job #308517)
#include <fstream>
#include <cmath>
#define MAXN 1000001
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
long v[MAXN+1],n,nr_ciur=1,fractii=1;
void ciur (long n)
{ long aux=long(double(sqrt(double(n)))),i,j;
v[1]=2;
for (i=3; i<=aux; i+=2)
{ if (v[i]==0)
{ v[++nr_ciur]=i;
for (j=3*i; j<=n; j+=i<<1)
v[j]=1;
}
}
for (; i<=n; i+=2)
if (v[i]==0)
v[++nr_ciur]=i;
}
long indicatorul_lui_Euler (long n)
{ long f_prim=1;
long double totient=n;;
while (v[f_prim]<=n)
{ if (n%v[f_prim]==0)
totient*=(1-1/(double)v[f_prim]);
f_prim++;
}
return (long)ceil(totient);
}
int main ()
{ f>>n; long aux;
ciur (MAXN);
for (int i=2; i<=n; i++)
fractii+=(2*(aux=indicatorul_lui_Euler (i)));
g<<fractii;
f.close (); g.close ();
return 0;
}