Pagini recente » Cod sursa (job #738370) | Cod sursa (job #1033561) | Cod sursa (job #1440299) | Cod sursa (job #2669631) | Cod sursa (job #2095270)
#include <fstream>
using namespace std;
ifstream fin ("fractii.in");
ofstream fout ("fractii.out");
int n,i,j,s,v[1000001];
int main()
{
fin >> n;
/// Euler's Totient
/// presupunem ca toate numerele mai mici i sunt prime cu i
/// adica gcd(i,x) = 1, x < i (cmmdc dintre i si un numar mai mic ca i sa fie 1)
for ( i=2; i<=n; i++ )
v[i] = i - 1;
/// folosim ciurul lui Eratostene ca sa vedem
/// numerele care nu sunt prime cu i
/// un multiplu al lui i nu va fi prim nici
/// cu numerele cu care nu este i prim
for ( i=2; i<=n; i++ )
for ( j=2*i; j<=n; j+=i )
v[j] -= v[i];
for ( i=1; i<=n; i++ )
s += v[i];
/// daca 3 e prim cu 4
/// si 4 e prim cu 3 deci inmultim cu 2
/// 1 este prim cu el insusi deci adaugam 1
fout << 2 * s + 1;
return 0;
}