Код посетителя может быть дополнительно упрощен:
const int array_sum( std::accumulate(a, a + array_size, 0) );
int sum( array_sum * array_sum );
for (int i = 0; i < array_size; ++i) {
sum -= a[i] * a[i];
}
И я полагаю, можно использовать временную :
const int array_sum( std::accumulate(a, a + array_size, 0) );
int sum( array_sum * array_sum );
for (int i = 0; i < array_size; ++i) {
const int tmp( a[i] );
sum -= tmp * tmp;
}
И, конечно, шаг возведения в квадрат можно также выполнить с помощью STL:
const int array_sum( std::accumulate(a, a + array_size, 0) );
std::transform( a, a + array_size, a, a, std::multiplies<int>() ); // store in a
const int sum( array_sum * array_sum - std::accumulate(a, a + array_size, 0) );
РЕДАКТИРОВАТЬ: простой цикл с одним проходом:
int array_sum( 0 ), square_sum( 0 );
for( int i(0) ; i < array_size; ++i )
{
int tmp(a[i]);
array_sum += tmp;
square_sum += tmp * tmp;
}
const int sum( array_sum * array_sum - square_sum );