وفق

[تصغير|مربع سحري ب[اللغة الفارسية|الفارسية يرجع للقرن السادس عشر الميلادي - من دار الوثائق القومية المصرية.]]
في الرياضيات المسلية، **الوَفْقُ** أو **المربع السحري** هي مصفوفة مربعة ذات حيز (n)، مكونة من n^2 أعداد صحيحة، بحيث أن حاصل جمع (n) رقم في كلّ من الصفوف والأعمدة والأقطار الرئيسية يأدي لنفس الحاصل.
توجد مربعات سحرية مهما كان الحيز n\ge1، بإقصاء n=2 (أربع أعداد)، مع كون الحالة n=1 تعتبر أمرا بديهيا. يبين الشكل التالي مثالا لمربع سحري من n=3
ملف:Magicsquareexample.svg
لاحظ أن مجموع كل سطر وعمود وقطر رئيسي يساوي دائما 15. يسمى هذا المجموع ثابتا سحريا (M) وقيمته بصفة عامة:
:M(n) = \frac{n(n^2+1)}{2}

قيم الثوابت السحرية لمربعات سحرية عادية ذات حيز n=5,4,3,\ldots هي متتالية:
15,34,65,\ldots (البقية).

## بناء المربعات السحرية
هناك العديد من الطرق القديمة والحديثة لبناء مربعات سحرية. يمكن تصنيف المربع السحري إلى ثلاثة أنواع رئيسية:
* مربع سحري ذو رتبة فردية *n*.
* مربع سحري ذو رتبة زوجية مفردة *n* (أي ان = *n*/2 عدد فردي).
* مربع سحري ذو رتبة زوجية مضاعفة *n* (أي ان = *n*/2 عدد زوجي).

### طرق إنشاء مربعات سحرية فردية الرتبة
تصغير|400بك|طريقة بناء مربع سحري فردي الرتبة.
تتميز المربعات السحرية فردية الرتبة في إمكانية تدوير المربع حتى تصبح الصفوف والأعمدة أقطارا بينما الأقطار صفوفا وأعمدة. يكون مركز المربع السحري دائما \frac{n^2+1}{2}
تتم العملية بالشكل الاتي:
:1- تعبئة المربع بالأرقام 1 حتى n2. سيتم تكرار المربع السحري من جميع جوانبه لتسهيل معرفة الأرقام المكملة خارجه عند الإزاحة.
:2- قراءة أحد القطرين وليكن القطر الرئيسي ووضعه كعمود وسط المصفوفة الجديدة.
:3- قراءة الخلايا الموازية فوق القطر الرئيسي مع إزاحتها خلية واحدة (من الصف والعمود) في كل مرة عن سابقتها نحو اليسار والأعلى. يتم التوقف بعد n-1)/2) خطا موازيا للقطر الرئيسي.
:3- قراءة الخلايا الموازية تحت القطر الرئيسي مع إزاحتها خلية واحدة (من الصف والعمود) في كل مرة عن سابقتها نحو اليمين والأسفل. يتم التوقف بعد n-1)/2) خط موازيا للقطر الرئيسي.
:4- يتم نقل العناصر الجديدة إلى مصفوفة جديدة مع تدويرها 45 درجة بحيث تصبح الصفوف والأعمدة الأصلية أقطارا والأقطار الأصلية صفوفا.

### طرق إنشاء مربعات سحرية زوجية الرتبة (مضاعفة)
تصغير|200بك|طريقة بناء مربع سحري ذو رتبة زوجية مضاعفة.
تمتاز المربعات السحرية التي يقبل ثابتها السحري القسمة على 4 بدون باقي بإمكانية تطبيق قاعدة التبديل بين المرافقات بعد كل خليتين.
يمكن تلخيص العملية كما يلي
:1- تعبئة المربع بالأرقام 1 حتى n2.

:2- التبديل بين جميع أركان المربع. مثلا في المربع 4×4 تكون أركانه هي 1، 4، 13، 16. عند التبديل بين الركن الأول والرابع أي 1، 16 والركن الثاني والثالث أي 4، 13.
:3- يتم تكرار الإبدال لكل خليتين متتاليتين (مع ما يقابهما أي التبديل بين كل *a*(n-i+1)(n-j+1) و*a*ji) وترك خليتين أخريين ابتداء من الخلية الثالثة في الصف الأول وحتى الوصول إلى مركز المربع مع عدم المساس بالأركان التي تم تغييرها في الخطوة السابقة.

### طرق إنشاء مربعات سحرية زوجية الرتبة (مفردة)
تصغير|250بك|طريقة بناء مربع سحري ذو رتبة زوجية مفردة.
تعتبر عملية إنشاء المربعات السحرية التي لا تقبل القسمة على 4 بدون باقي صعبة نسبيا، كما أنها لا تتميز بالتماثل التام. أبسط الطرق تتمثل في إعادة تقسيم المربع إلى 4 مربعات صغيرة متكافئة كما يلي:
:1- تقسيم المربع إلى 4 مربعات صغيرة متكافئة. لاحظ أن المربعات الناشئة عبارة عن مربعات فردية.
:2- تعبئة المربع الأول بالأرقام 1 حتى n2/4.
:3- تحويل المربع في الخطوة 2 إلى مربع سحري بالطريقة المستخدمة في المربعات السحرية الفردية.
:4- نقل نسخة من هذا المربع في المربعات الثلاثة الباقية مع إضافة n2/4 لكل عنصر في المربع الثاني، n2/2 لكل عنصر في المربع الثالث، و3n2/4 لكل عنصر في المربع الرابع.
:5- أصبح المربع السحري جاهزا تقريبا ولكن ينقصه شرط تحقق مجموع عناصر كل قطر. في هذه الحالة يتم التبديل بين بعض عناصر مربعين متجاورين حتى يكتمل الشرط.

## مشاكل رياضية ذات صلة
استخدام عملية الطرح في مكعب من الاعداد من 1 إلى 9

## الخوارزمية
### برمجة المربعات السحرية
حساب المربعات السحرية يصبح سهلا بعد معرفة خوارزمياتها ومن الممكن برمجتها بأي لغة برمجة. مثلا باستعمال متصفح الويب ولغة جافا سكربت يمكن إنشاء دالة المربع السحري لأي عدد طبيعي كما يلي


```html4strict
<html>
<script>
function magic(n)
{
   var i=0, j=(n-1)/2, p, k, m=[],  m1=[], m2=[];
    if(n<=0 || n-Math.ceil(n)!=0) return 'Error: n must be a positive integer..';
    if(n==2) return 'Error: there is no magic square of 2x2 !';
    if(n%4==0){//Double Even
        for (i=0; i<n/2; i++){
            for (j=0; j<n; j++){
                if((((i%4==0)||(i%4==3))&&((j%4==1)||(j%4==2)))||(((j%4==0)||(j%4==3))&&((i%4==1)||(i%4==2)))){
                    m1[j]= i*n+j+1;
                    m2[n-j-1]= n*(n-i)-j;
                }
                else{
                    m1[j]= n*(n-i)-j;
                    m2[n-j-1]=i*n+j+1;
                }            }
            m[i]=m1;
            m[n-i-1]=m2;
            m1=[];
            m2=[];
        }
    }
    else if(n%2==0){//Single Even
        p = n/2;
        m1 = magic(p);
        for (i=0; i<2*p; i++)m[i]=[];
        for (i=0; i<p; i++)for(j=0; j<p; j++){
            m[i][j] = m1[i][j]*1;
            m[i][j+p] = m1[i][j]*1+2*p*p;
            m[i+p][j] = m1[i][j]*1+3*p*p;
            m[i+p][j+p] = m1[i][j]*1+p*p;
         }
        for(i=0; i<p; i++){
            k = (n-2)/4;
            for(j=0; j<k; j++){
                k2=m[i][j];
                m[i][j]=m[i+p][j];
                m[i+p][j]=k2;
            }
        }
        for(i=0; i<p; i++){
            for(j=n-k+1; j<n; j++){
                k2=m[i][j];
                m[i][j]=m[i+p][j];
                m[i+p][j]=k2;
            }
        }
        k2=m[k][0]; m[k][0]=m[k+p][0]; m[k+p][0]=k2;
        k2=m[k][k]; m[k][k]=m[k+p][k]; m[k+p][k]=k2;
    }
    else{// Odd
        for (k=1; k<=n*n; k++)
        {
            m2[i*n +j] = k;
            i--;
            j++;
            if (k%n == 0){
                i += 2;
                j--;
            }
            if (j==n)j = 0;
            if (i==-1) i = n-1;
        }
        for(i=0;i<n;i++){for(j=0;j<n;j++)m1[j]=m2[i*n+j];m[i]=m1;m1=[];}
    }
    m[0][0]=' '+m[0][0];
    for (k=0; k<n; k ++) m[k][n-1] += '\n';
    return m;
}
</script>
<noscript> Java script must be enabled..<br /> </noscript>
<body>
Magic square of <input id=ent value="6">
<input type="button" value = " = " onclick ="disp.value=magic(ent.value*1)">
<br /><textarea id="disp" style="width: 780px; height: 300px">
</textarea>
</body>
</html>
```



## تطبيقات
للمربع السحري بعض التطبيقات المسلية والعلمية أحيانا. يمكن بواسطته مثلا تحليل المساحات بشكل منتظم. مثال ذلك المسألة التالية:

لو كان لدينا 81 قطعة ذهبية بحيث أن كتلة كل قطعة تساوي ترتيبها. أي أن كتلة الأولى 1 غرام والثانية 2 غرام وهكذا وتطلب الأمر توزيعها بشكل عادل بين 9 أفراد.
نلاحظ أن إعادة توزيع هذه القطع في مربع سحري 9×9 يعطي الحل الأمثل بحيث يصبح نصيب كل فرد أحد صفوف المربع. يمكن أيضا توزيعها بطريقة الأعمدة بحيث يكون نصيب كل فرد أحد أعمدة المربع السحري.
## مراجع

تصنيف:رموز سحرية
تصنيف:مربعات سحرية
تصنيف:مسائل غير محلولة في الرياضيات
تصنيف:مصفوفات