मान लीजिए कि हमें एक मैट्रिक्स दिया गया है जिसमें n पंक्तियाँ और m कॉलम हैं। हमें मैट्रिक्स में लगातार तत्वों की सबसे बड़ी संख्या का पता लगाना है जहां तत्वों का जीसीडी 1 से अधिक है। लगातार तत्व या तो क्षैतिज या लंबवत रूप से मैट्रिक्स में स्थित हो सकते हैं।
तो, अगर इनपुट पसंद है
3 | 7 | 9 | 12 |
5 | 9 | 4 | 6 |
7 | 8 | 5 | 10 |
और एम =4, एन =3; तो आउटपुट 3 होगा।
दिए गए मैट्रिक्स का चौथा कॉलम 12, 6, 10 है। इस कॉलम के तत्वों का जीसीडी 2 है। चूंकि तीन तत्व हैं, उत्तर 3 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- mat :=आयामों की एक नई 3d सूची m x n x n
- res :=0
- मैं के लिए 0 से n की सीमा में, करते हैं
- जे के लिए i से n तक, करें
- gcd_temp :=0
- x :=0
- k के लिए 0 से m की सीमा में, करें
- यदि i, j के समान है, तो
- mat[i, j, k] :=input_list[i, k]
- अन्यथा,
- mat[i, j, k] =तत्वों का gcd(mat[i, j-1, k], input_list[j, k])
- gcd_temp =तत्वों का gcd (gcd_temp, mat[i, j, k])
- अगर gcd_temp>
1, तो
- x :=x + j - i + 1
- अन्यथा,
- res :=अधिकतम रेस, x
- अगर चटाई[i, j, k]> 1, तो
- gcd_temp :=mat[i, j, k]
- x :=j - i + 1
- यदि i, j के समान है, तो
- जे के लिए i से n तक, करें
- res :=अधिकतम रेस, x
- मैं के लिए 0 से n की सीमा में, करते हैं
- रिटर्न रेस
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import gcd def solve(n, m, input_list): mat = [[[0] *m] *n] *n res = 0 for i in range(n): for j in range(i, n): gcd_temp = 0 x = 0 for k in range(m): if i == j: mat[i][j][k] = input_list[i][k] else: mat[i][j][k] = gcd(mat[i][j-1][k], input_list[j][k]) gcd_temp = gcd(gcd_temp, mat[i][j][k]) if gcd_temp > 1: x += j - i + 1 else: res = max(res,x) if mat[i][j][k] > 1: gcd_temp = mat[i][j][k] x = j - i + 1 res = max(res,x) return res print(solve(3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]))
इनपुट
3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]
आउटपुट
3