#include #include #include #include #include #include #include #include #include #include using namespace std; vector> Magic_Square(int n){ vector> v(n, vector(n,0)); if(n&1){ //odd int x = n/2; int y = 0; int cnt = 0; v[y][x] = ++cnt; while(cnt < n*n){ x = (x+1)%n; y = (y-1+n)%n; if(v[y][x] != 0){ x = (x-1+n)%n; y = (y+2)%n; } v[y][x] = ++cnt; } }else if(n%4 == 0){ //4k int x = 0; int y = 0; for(int i=0; i tmp(n*n); iota(tmp.begin(), tmp.end(), 1); set s(tmp.begin(), tmp.end()); for(int i=0; i=0; i--){ for(int j=n-1; j>=0; j--){ if(v[i][j] == 0){ v[i][j] = *s.begin(); s.erase(v[i][j]); } } } }else{ //4k+2 auto u = Magic_Square((n-2)/2 + 1); for(int i=0; i> w((n-2)/2+1, vector((n-2)/2 + 1, 0)); for(int i=0; i>& v){ int sum = accumulate(v[0].begin(), v[0].end(),0); for(int i=0; i> n; auto v = Magic_Square(n); for(int i=0; i