for(int k=0; k < 40000; k += 256)
{
for(int l = 0; l < 40000; l += 256)
{
for(int i = k; i < min(40000,k+256); i++)
{
 for( int j = max(k+1,l); j < min(40000,l+256); j++)
 {
  r = sqrt((x[i]-x[j])*(x[i]-x[j]) +
    (y[i]-y[j])*(y[i]-y[j]) +
   (z[i]-z[j])*(z[i]-z[j]))+0.5;
   XY[r] += b[i]*b[j];
}
}
}
}

256エントリーずつにした