Pagini recente » Cod sursa (job #1007764) | Cod sursa (job #1669780) | Cod sursa (job #1110843) | Cod sursa (job #402851) | Cod sursa (job #477400)
Cod sursa(job #477400)
# 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
*/