Pagini recente » Cod sursa (job #767719) | Cod sursa (job #1463026) | Cod sursa (job #2375448) | Cod sursa (job #1043818) | Cod sursa (job #1791995)
#include <ifstream>
#include <cmath>
using namespace std;
const int valoareMaxima=1000000;
int numerePrime[valoareMaxima+1], k, n;
bool esteVizitat[valoareMaxima+1];
int putere(int x, int y)
{
int p=0;
while(x%y==0)
{
x/=y;
p++;
}
return p;
}
int indicatorulLuiEuler(int x)
{
int p=1;
if(!esteVizitat[x])
return x-1;
else
{
for(int i=1; i<=k; i++)
{
if(numerePrime[i]>x)
break;
else if(putere(x, numerePrime[i])!=0)
p*=(numerePrime[i]-1)*pow(numerePrime[i], putere(x, numerePrime[i])-1);
}
}
return p;
}
int main()
{
esteVizitat[1]=1;
ifstream fin("fractii.in");
cin>>n;
for(int i=2; i<=n; i++)
{
if(!esteVizitat[i])
{
numerePrime[++k]=i;
for(int j=i+i; j<=n; j+=i)
esteVizitat[j]=true;
}
}
int solutie=0;
for(int i=1; i<=n; i++)
solutie+=indicatorulLuiEuler(i);
ofstream fout("fractii.out");
fout<<solutie*2-1;
return 0;
}