Изменения
Нет описания правки
         a[i][j] = cur;
      }   
   for i := 0 to n - 1
      for j := 0 to n - 1 {
   // Предподсчёт скалярных произведений
   // Пусть precalcpreСalc[i][j] - "скалярное произведение для битовых представлений" чисел i и j   // "&" - битовый and; "<<**" - битовый сдвиг влевовозведение в степень.
   int k = ceil(log2(n)); //округление вверх
   for i := 0 to (1 << 2 ** k) - 1      for j := 0 to (1 << 2 ** k) - 1 {         int scalmul scalMul = 0;
         for pos := 0 to k - 1
            if (((1 << 2 ** pos) & i) != 0 and ((1 << 2 ** pos) & j) != 0) {                 scalmul scalMul = (scalmul scalMul + 1) mod 2;
            }
      }
   for i := 0 to n - 1 {
      while (start < n) {
         int cursuma curSumA = 0, cursumb curSumB = 0, curpos curPos = start, deg = (1 << 2 ** (k - 1));         while (curpos curPos < start + k and curpos curPos < n) {            cursuma curSumA = cursuma curSumA + a[i][curposcurPos] * deg;            cursumb curSumB = cursumb curSumB + b[curposcurPos][i] * deg;
            deg = deg div 2;
         }
         anew[i][start div k] = cursumacurSumA;         bnew[start div k][i] = cursumbcurSumB;
         start = start + k;
      }
   for i := 0 to n - 1
      for j := 0 to n - 1 {
         int curans curAns = 0;
         for pos := 0 to m - 1 {
         }
         ans[i][j] = curanscurAns;
   }