Суть задачи:
Имеется массив данных Arr[N,N,N,N] и некая функция заполняющая его: Arr[i,j,k,l] = f(i,j,k,l). Известно, что уникальны не все результаты работы данной функции, а именно:
1) Arr[i,j,k,l] = Arr[j,i,k,l]
2) Arr[i,j,k,l] = Arr[i,j,l,k]
3) Arr[i,j,k,l] = Arr[j,i,l,k]
4) Arr[i,j,k,l] = Arr[k,l,i,j]
5) Arr[i,j,k,l] = Arr[l,k,i,j]
6) Arr[i,j,k,l] = Arr[k,l,j,i]
7) Arr[i,j,k,l] = Arr[l,k,j,i]
Итого имеем уникальных комбинаций: N*(N+1)*(N*N + N + 2)/8
Соответственно имеет смысл вычислить только уникальные значения, а остальные просто скопировать. Первые три условия симметрии решаются просто:
Код
do l = 1, N
do k = 1, l
do j = 1, N
do i = 1, j
if ("условие для 4-7") Arr[i,j,k,l] = f(i,j,k,l)
enddo
enddo
enddo
enddo
do k = 1, l
do j = 1, N
do i = 1, j
if ("условие для 4-7") Arr[i,j,k,l] = f(i,j,k,l)
enddo
enddo
enddo
enddo
А вот как красиво воспользоваться условиями симметрии 4 - 7?