Cod sursa(job #856600)

Utilizator EduardGeorgescuGeorgescu Eduard EduardGeorgescu Data 16 ianuarie 2013 19:35:28
Problema Fractii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<cstdio>
#include<cmath>
using namespace std;

bool c[1000000010] ;
int prime [80000] ;
int np = 1 ;

void ciur ( int n ){
	
	int i,j,lim;
	
	lim = sqrt ( double ( n ) );
	
	c[0]=c[1]=1;
	
	for ( i = 4 ; i<=n ;i+=2)
		c[i]=1;
	
	for ( i = 3 ; i <= lim ;i+=2 )
		if ( c[i] == 0 )
			for ( j = i * i ; j <= n ; j += 2*i)
				c[j]=1 ;
			
	prime [1]=2;
			
	for ( i = 3 ; i<=n ;i+=2)
		if(c[i]==0)
			prime[++np]=i;
				
}

inline long long div ( long long x ) {
	
	int phi = x ;
	int i;

	for ( i = 1 ; i <= np ; i ++ )
		if ( x % prime[i] == 0 )
			phi = ( long long ) phi * (prime[i] - 1) / prime[i] ;
		
	return phi;
}

int main(){
	
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	
	int N ;
	
	scanf("%d" , &N);
	
	ciur ( N );
	
	int phi = div(N);
	
	int sol = 1 ;
	for ( int i = 2 ; i<=N ; i++ )
		sol += 2 * div(i) ;

	printf ("%d" , sol );
	
	return 0;
}