Pagini recente » Cod sursa (job #2040148) | Cod sursa (job #870692) | Cod sursa (job #2195982) | Cod sursa (job #3122156) | Cod sursa (job #208674)
Cod sursa(job #208674)
#include <fstream>
using namespace std;
long euler(long x)
{
long p[500],i,d,f,k,ie,y=x;
k=0; // nr. de factori primi
// tratam cazul cand n este 1
if (x==1) p[++k]=1;
// elimin 2 din descompunere
d=2;f=0;
while (x>1&&x%d==0) {x/=d;f=1;}
if (f) p[++k]=d;
// elimin 3,5,7,... din descompunere
d=3;
while (x>1)
{
f=0;
while (x%d==0) {x/=d;f=1;}
if (f) p[++k]=d;
d+=2;
}
// calculez indicatorul lui Euler
ie=y;
for(i=1;i<=k;i++)
ie*=(p[i]-1);
for(i=1;i<=k;i++)
ie/=p[i];
return ie;
}
int main()
{
long n,i,s=0;
ifstream f("fractii.in");
ofstream g("fractii.out");
f>>n;
f.close();
for(i=2;i<=n;i++)
s+=euler(i);
g<<2*s+1;
f.close();
g.close();
return 0;
}