Cod sursa(job #477400)

Utilizator marius135Dumitran Adrian Marius marius135 Data 14 august 2010 13:49:57
Problema Sum Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb

# include <stdlib.h>
# include <cstdio>

# define nmax 100005
using namespace std;

long long phi[100005],x,n;
void sum()
{int i,j;
    for (i = 1; i <= nmax; i++)
    phi[i] = i - 1;
    
    for(i = 2; i <= nmax; i++)
          for (j = 2 * i; j <= nmax; j += i)
          phi[j] -= phi[i];
    
}      

int main()
{int i;
    freopen("sum.in","r",stdin);
    freopen("sum.out","w",stdout);
    
    sum();
    scanf("%lld",&x);
    for (i = 1; i <= x; i++)
    {
        scanf("%lld",&n);
       
        printf("%lld",2 * phi[n] * n);
        printf("\n");
        }
return 0;
}

/*
/*
   Un fel de ciclu a lui eratostene.... nr prime se aduna.... cele cu 2 divizori se scad... cu 3 divizori primi se aduna



#include<stdio.h>
#include<time.h>
#include<fstream>
#include<iostream>

using namespace std;
time_t start;
#define maxn 1001 * 103

long long  val[ maxn];
char ok[ maxn ];
int nr[ maxn ];

void erato(int N)
{
	
	
	for( int i = 2; i<= N; ++i)
	{
		if( ok[ i ]  != 0) continue; // numar de genul 12 ( s-a ocupat 6 de el )
		long long sum = 0;
		for( int j = 1; j * i <= N; ++j)
		{
			int p = i * j;
			// limit = j * i * 2  suma e i * ( 1 + 2.... j *2 )
			sum += (long long)i * (j * 4 - 1 );
			val[ p ] -= sum;
			if(  nr[ i ] == 0  || ( nr[ i ] & 1))
				val[ p ] += 2 * sum;
			
			if( nr[ i ] == 0  && j != 1) 
			{
				nr[ p ]++; 
				ok[ p ] = 0;
				if( nr[ p ] == 1) 
					ok[ p ] = 1; 
				continue;
			}
			if( nr[ i ] == nr[ p ] )
				ok[ p ] = 1;
			
		}
	}
}

int main()
{
	int N;
	//start =clock();
	freopen("sum.in","r",stdin);
	freopen("sum.out","w",stdout);
	//ifstream f("sum.in"); ofstream g("sum.out");
	scanf("%d", &N);
	
	erato( 100000 );
	
	for( int i = 1; i <= N; ++i)
	{
		int a;
		scanf("%d", &a);
		long long rez = (long long ) a * ( 2 * a+ 1)  - val[ a ];;
		printf("%lld\n", rez);
	}
	//printf("%f", (float)( clock() - start )/ CLOCKS_PER_SEC);
	
	
	return 0;
}
sursa mea care e oki si intra in timp aici
*/