Pagini recente » Cod sursa (job #1017048) | Cod sursa (job #1806850) | Cod sursa (job #1596524) | Cod sursa (job #2080696) | Cod sursa (job #2392991)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin( "fractii.in" );
ofstream fout( "fractii.out" );
const int NMAX = 1000005;
int N;
bool prim[NMAX];
vector <int> prime;
void Read()
{
fin >> N;
fin.close();
}
int IndEuler( int val )
{
int ans = val;
for( int i = 0; i < prime.size() && prime[i] * prime[i] <= val; ++i )
{
if( val % prime[i] == 0 )
{
ans -= ans / prime[i];
while( val % prime[i] == 0 )
val /= prime[i];
}
}
if( val > 1 )
ans -= ans / val;
return ans;
}
void Do()
{
prim[2] = true;
for( int i = 3; i <= N; i += 2 )
prim[i] = true;
for( int i = 3; i * i <= N; i += 2 )
if( prim[i] )
for( int j = 3; i * j <= N; j += 2 )
prim[i * j] = false;
prime.push_back( 2 );
for( int i = 3; i <= N; ++i )
if( prim[i] ) prime.push_back( i );
int nr = 0;
for( int i = 2; i <= N; ++i )
nr += IndEuler( i );
nr = nr * 2 + 1;
fout << nr << '\n';
}
int main()
{
Read();
Do();
return 0;
}