मैजिक स्क्वायर - C & amp; Python उदाहरण
मैजिक स्क्वायर क्या है?
मैजिक स्क्वायर एक वर्गाकार मैट्रिक्स है जिसमें विशेष संख्या व्यवस्था होती है। इन संख्याओं को इस तरह व्यवस्थित किया जाता है कि प्रत्येक विकर्ण, पंक्ति और स्तंभ पर संख्याओं का योग समान रहता है। मैजिक स्क्वायर गेम मनोरंजक गणित में उपयोग की जाने वाली सरल तर्क पहेलियाँ हैं।
जादुई वर्ग उदाहरण:
ऊपर दिया गया चित्र क्रम 3 के जादुई वर्ग का एक उदाहरण है। प्रत्येक विकर्ण, पंक्ति और स्तंभ का योग 15 है।
मैजिक स्क्वायर कैसे काम करता है
मैजिक स्क्वायर n*n मैट्रिसेस होते हैं जिनमें n^2 धनात्मक पूर्णांक होते हैं। एक वर्ग मैट्रिक्स की पंक्तियों या स्तंभों की संख्या को मैट्रिक्स का क्रम कहा जाता है।
आम तौर पर, मैजिक स्क्वेयर पहेलियों में विषम क्रम होते हैं और 1 से n^2 तक के पूर्णांक होते हैं। प्रत्येक विकर्ण, पंक्ति और स्तंभ का योग समान होता है। इस संख्या को मैजिक योग या मैजिक स्थिरांक कहा जाता है। आम तौर पर, यह मैजिक योग मैट्रिक्स के क्रम पर निर्भर करता है। ऑर्डर n के मैजिक योग के लिए मैजिक स्क्वेयर फॉर्मूला है-
आइए पूर्णांक 3 वाले जादुई वर्ग का उदाहरण लें। तो, जादुई योग होगा-
इन्हें जादू क्यों कहा जाता है?
प्राचीन गणितज्ञ संख्याओं के कई दिलचस्प संयोजनों की प्रकृति से मोहित थे। जादुई वर्ग उनमें से एक था। जादुई वर्गों का सबसे पहला प्रमाण 190 ईसा पूर्व में चीन में मिलता है।
कुछ अध्ययनों से प्राचीन जापान, भारत और अरब में जादुई वर्ग पहेली के साक्ष्य मिलते हैं। कुछ किंवदंतियों के आधार पर, यह माना जाता था कि संख्याओं की वे विशेष संरचनाएँ जादुई दुनिया से जुड़ी थीं। इसलिए, उन वर्गों को जादुई वर्ग नाम दिया गया।
मैजिक स्क्वायर के प्रकार
जादुई वर्ग गणित के विभिन्न प्रकार हैं -
- सामान्य जादुई वर्ग: इस प्रकार के जादुई वर्ग में प्रथम n^2 संख्याएं होती हैं।
- अर्द्ध-जादुई वर्ग: इस प्रकार में, केवल पंक्तियों और स्तंभों का योग जादुई स्थिरांक तक होता है।
- सरल जादू वर्ग: पिछले प्रकार के विपरीत, पंक्तियाँ, स्तंभ और दोनों विकर्णों का योग जादुई स्थिरांक होता है।
- सबसे उत्तम जादुई वर्ग: यह दो विशेष गुणों वाला एक सामान्य जादुई वर्ग है। यहाँ, मैट्रिक्स का प्रत्येक 2 गुणा 2 उपवर्ग कुल 2(n^2+1) बनाता है। और संख्याओं का कोई भी जोड़ा जो ग्रिड से n/2 वर्ग दूर है, उसका योग n^2+1 होता है।
गुणों के आधार पर, मैजिक स्क्वायर के कई और प्रकार हैं। लेकिन जब भी हम मैजिक स्क्वायर का उल्लेख करते हैं, तो हम मान लेते हैं कि यह एक विषम क्रम का सामान्य और सरल मैजिक स्क्वायर है।
मैजिक स्क्वायर उत्पन्न करने के लिए एल्गोरिदम
विषम क्रम जादुई वर्ग उत्पन्न करने के लिए एल्गोरिथ्म है:
- पहला नंबर या 1 (n/2, n-1) पर संग्रहीत किया जाएगा, जहाँ पहला निर्देशांक पंक्ति की स्थिति है, और दूसरा निर्देशांक स्तंभ की स्थिति है। बाद के चरणों के लिए, आइए इस स्थिति को (x, y) के रूप में निरूपित करें।
- अगली संख्याएँ (x-1, y+1) पर संग्रहीत की जाएँगी। यदि स्थिति मान्य नहीं है, तो हम निम्नलिखित शर्तों पर विचार करेंगे।
- यदि पंक्ति की स्थिति -1 है, तो यह n-1 पर वार्प हो जाएगी। इसी तरह, यदि गणना की गई कॉलम की स्थिति n है, तो यह 0 पर वार्प हो जाएगी।
- यदि गणना की गई स्थिति में पहले से ही कोई संख्या है, तो पंक्ति की स्थिति 1 से बढ़ जाएगी, और स्तंभ की स्थिति 2 से घट जाएगी।
- यदि पंक्ति की स्थिति -1 है और संगत स्तंभ की स्थिति n है, तो नई स्थिति (0, n-2.
नोट: यह एल्गोरिथ्म केवल विषम क्रम के वैध मैजिक स्क्वायर उत्पन्न करता है। हम इस मैजिक स्क्वायर को पहले n^2 नंबरों के साथ एक सामान्य मैजिक स्क्वायर भी मानते हैं। इसके अलावा, n के समान मान के लिए कई समाधान हो सकते हैं।
आइए एक उदाहरण लेते हैं और देखते हैं कि यह कैसे काम करता है। मान लीजिए कि हम क्रम 3 का जादुई वर्ग ज्ञात करना चाहते हैं। चूंकि यह विषम क्रम का एक सरल और सामान्य जादुई वर्ग होगा, इसलिए इसमें 1 से 3^2 या 9 तक की सभी संख्याएँ शामिल होंगी।
यह काम किस प्रकार करता है?
के अनुसार हमारे कलन विधि, चरण निम्नलिखित होंगे:
चरण 1) पहला नंबर या 1 (3/2, 3-1) या (1, 2) स्थिति पर होगा। परंपरा के अनुसार, बाद के चरणों के लिए x= 1 और y= 2 पर विचार करें।
चरण 2) शेष संख्याओं की स्थिति की गणना निम्न प्रकार से की जाएगी-
संख्या 2 की स्थिति:
अगली संख्या (x-1, y+1) या (0, 3) पर होगी, जो वैध स्थिति नहीं है। शर्त (a) का उपयोग करके, संगत वैध स्थिति (0,0) होगी। इसलिए, x= 0, y= 0.
संख्या 3 की स्थिति:
संख्या 3 (x-1, y+1) या (-1, 1) पर होगी, जो वैध स्थिति नहीं है। शर्त (a) का उपयोग करके, वैध पंक्ति स्थिति n-1 या 2 होगी। इसलिए, संख्या 3 (2, 1) पर होगी। अगली संख्या के लिए, x= 2, y= 1.
संख्या 4 की स्थिति:
संख्या 4 (x-1, y+1) या (1, 2) पर होनी चाहिए जो एक वैध स्थिति है। लेकिन उस स्थिति में पहले से ही एक संख्या है। शर्त (b) के अनुसार, वैध स्थिति (1+1, 2-2) या (2,0) होगी। अगली संख्या x= 2, y= 0 के लिए।
संख्या 5 की स्थिति:
संख्या 5 (x-1, y+1) या (1, 1) पर होनी चाहिए जो एक वैध स्थिति है। अगली संख्या x= 1, y= 1 के लिए।
संख्या 6 की स्थिति:
संख्या 6 (x-1, y+1) या (0, 2) पर होनी चाहिए जो एक वैध स्थिति है। अगली संख्या x= 0, y= 2 के लिए।
संख्या 7 की स्थिति:
संख्या 7 (x-1, y+1) या (-1, 3) पर होनी चाहिए जो वैध स्थिति नहीं है। शर्त (c) के अनुसार, वैध स्थिति (0, n-2) या (0, 1) होगी। अगली संख्या x= 0, y= 1 के लिए।
संख्या 8 की स्थिति:
संख्या 8 (x-1, y+1) या (-1, 2) पर होनी चाहिए जो वैध स्थिति नहीं है। शर्त (a) का उपयोग करके, वैध स्थिति (2, 2) होगी। अगली संख्या x= 2, y= 2 के लिए।
संख्या 9 की स्थिति:
संख्या 9 (x-1, y+1) या (1, 3) पर होनी चाहिए जो वैध स्थिति नहीं है। शर्त (a) का उपयोग करके, वैध स्थिति (1, 0) होगी।
छद्म कोड
Begin Declare an array of size n*n Initialize the array to 0 Set row = n/2 Set column = n-1 For all number i: from 1 to n*n If the row = -1 and column = n row = 0 column = n-2 Else If row = -1 row = n-1 If column = n column = 0 If the position already contains a number decrement column by 2 increment row by 1 continue until the position is not 0 Else put the number i into the calculated position increment i Increment column value Decrement row value End
C++ कोड मैजिक स्क्वायर
इनपुट:
/* A C/C++ program for generating odd order magic squares */ #include <bits/stdc++.h> using namespace std; void GenerateMagicSquare(int n) { int magic[n][n]; //initializing the array for(int i=0; i<n; i++) for(int j=0; j<n; j++) magic[i][j] = 0; //setting row and column value int i = n / 2; int j = n - 1; for (int k = 1; k <= n * n;) { //checking condition (c) if (i == -1 && j == n) { j = n - 2; i = 0; } else { //checking condition (a) if (j == n) j = 0; if (i < 0) i = n - 1; } //checking condition (b) if (magic[i][j]) { j -= 2; i++; continue; } else { //placing the number into the array magic[i][j] = k; k++; } //for the next number setting (i-1, j+1) j++; i--; } //printing the matrix for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << magic[i][j] << " "; cout << endl; } } int main() { //This code works for only odd numbers int n = 7; cout<<"The magic sum is " << n*(n*n+1)/2 <<endl; GenerateMagicSquare(n); return 0; }
उदाहरण का आउटपुट:
The magic sum is 175 20 12 4 45 37 29 28 11 3 44 36 35 27 19 2 43 42 34 26 18 10 49 41 33 25 17 9 1 40 32 24 16 8 7 48 31 23 15 14 6 47 39 22 21 13 5 46 38 30
Python कोड मैजिक स्क्वायर
def GenerateMagicSquare(n): #initializing the array magic = [[0 for x in range(n)] for y in range(n)] #setting row and column value i = n // 2 j = n - 1 k = 1 while k <= (n * n): #checking condition (c) if i == -1 and j == n: j = n - 2 i = 0 else: #checking condition (a) if j == n: j = 0 if i < 0: i = n - 1 #checking conditon (b) if magic[i][j]: j = j - 2 i = i + 1 continue else: #placing the number into the array magic[i][j] = k k = k + 1 #for the next number setting (i-1, j+1) j = j + 1 i = i - 1 #printing the matrix for i in range(0, n): for j in range(0, n): print('%2d ' % (magic[i][j]),end='') if j == n - 1: print() #This code works for only odd numbers n = 7 print("The magic sum is ",n * (n * n + 1) // 2, "\n") GenerateMagicSquare(n)
उदाहरण का आउटपुट:
The magic sum is 175 20 12 4 45 37 29 28 11 3 44 36 35 27 19 2 43 42 34 26 18 10 49 41 33 25 17 9 1 40 32 24 16 8 7 48 31 23 15 14 6 47 39 22 21 13 5 46 38 30
जटिलता विश्लेषण
- अंतरिक्ष जटिलता: मैजिक स्क्वायर मैट्रिक्स को बनाए रखने के लिए, हमें एक*n सरणी की आवश्यकता होती है। इसलिए, स्पेस जटिलता O(n^2) होगी।
- समय जटिलता: मैजिक स्क्वेयर गणित उत्पन्न करने के लिए हमने जिस कोड का उपयोग किया है, उसमें दो लूप हैं। बाहरी लूप n बार चलता है, और आंतरिक लूप भी n बार चलता है। अंततः समय जटिलता O(n^2) है।