Pagini recente » Monitorul de evaluare | Cod sursa (job #1515487) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #525887)
Cod sursa(job #525887)
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
#define NMAX 1000001
int ciur[NMAX];
int phi[NMAX];
//Gaseste pentru fiecare numar un factor prim
void eratostene()
{
memset(ciur,0,sizeof(ciur));
for(int i=2;i<NMAX;i++)
{
if(!ciur[i])
{
for(int j=i;j<NMAX;j+=i)
{
if(!ciur[j])
ciur[j]=i;
}
}
}
}
void euler()
{
phi[1]=1;
for(int i=2;i<NMAX;i++)
{
if(!ciur[i]) //numarul e prim
phi[i]=i-1;
else
{
int nr=i;
int factor_prim=ciur[i];
nr/=factor_prim;
int rez=factor_prim-1;
while(nr%factor_prim==0)
{
nr/=factor_prim;
rez*=factor_prim;
}
phi[i]=rez*phi[nr];
}
}
}
int main()
{
ifstream in("fractii.in");
ofstream out("fractii.out");
int n,total=0;
in>>n;
for(int i=2;i<=n;i++)
total+=2*phi[i];
++total;
out<<total<<"\n";
in.close();
out.close();
}