>>520のコードでなぜ速くなるのかが、昨日やっと理解できて

double x[N], y[N], z[N];
int b[N], r[N], XY[M];

for(int i = 0; i < max; i++){
 const int bi = b[i];
 const int xi = x[i];
 const int yi = y[i];
 const int zi = z[i];

 for( int j = i+1; j < max; j++){
  r[j] = sqrt((xi-x[j])*(xi-x[j]) +
   (yi-y[j])*(yi-y[j]) +
   (zi-z[j])*(zi-z[j]))+0.5;
 }
 
 for( int j = i+1; j < max; j++)
  XY[r[j]] += bi*b[j];
}

このように書けば、書き込みの無駄が省ける事に気づきました
これで1%ほど速度が上がりました