Pagini recente » Cod sursa (job #1915580) | Profil tiulenivisk | Cod sursa (job #1452690) | Cod sursa (job #1683526) | Cod sursa (job #1792003)
#include <fstream>
#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
{
int pr=putere(x, numerePrime[i]);
if(pr!=0)
p*=(numerePrime[i]-1)*pow(numerePrime[i], pr-1);
}
}
}
return p;
}
int main()
{
esteVizitat[1]=1;
ifstream fin("fractii.in");
fin>>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;
}