Trong hướng dẫn này, chúng ta sẽ viết một chương trình tìm một số sao cho mô đun của nó với mỗi phần tử mảng là như nhau. Hãy xem một ví dụ.
Đầu vào - arr ={10, 4, 2}
Đầu ra - 1 2
Nếu có hai số x, y và x> y , giả sử rằng x - y =d.
Sau đó, x =y + d .
Giả sử chúng ta có số k sao cho x% k =y% k. Áp dụng mô-đun k cho phương trình trên và tìm giá trị d .
x%k = (y+d)%k y%k = y%k +d%k d%k = 0
Từ phép tính trên, nếu số k là ước số của sự khác biệt giữa x và y . Sau đó, nó sẽ là một ước của các số x và y .
Hãy áp dụng khái niệm tương tự cho mảng các phần tử. Và tìm giá trị k. Xem các bước để giải quyết vấn đề.
-
Khởi tạo mảng bằng số
-
Đây, d sẽ là sự khác biệt giữa giá trị tối đa và giá trị nhỏ nhất của các phần tử mảng.
-
Sắp xếp các giá trị của mảng bằng phương pháp sắp xếp.
-
Tìm sự khác biệt giữa số cuối cùng và số đầu tiên.
-
Nếu sự khác biệt bằng 0, thì tất cả các số đều giống nhau. Sau đó, kết quả của mô-đun với bất kỳ số nào cũng cho kết quả tương tự.
-
Tìm ước số khác của số d . Và lưu trữ chúng.
-
Lặp lại trên tất cả các ước số và tìm số có môđun với tất cả các phần tử của mảng đều giống nhau.
Ví dụ
Hãy xem mã.
#include <bits/stdc++.h> using namespace std; void findNumbers(int arr[], int n) { sort(arr, arr + n); int d = arr[n - 1] - arr[0]; // check whether all elements are same or not if (d == 0) { cout << "Infinite number of k's"; return; } // finding the divisors of d vector <int> v; for (int i = 1; i * i <= d; i++) { if (d % i == 0) { v.push_back(i); if (i != d / i) { v.push_back(d / i); } } } // findind the k's for (int i = 0; i < v.size(); i++) { int temp = arr[0] % v[i]; int j; for (j = 1; j < n; j++) { if (arr[j] % v[i] != temp) { break; } } if (j == n) cout << v[i] << " "; } cout << endl; } int main() { int arr[] = {10, 4, 2}; findNumbers(arr, 3); return 0; }
Đầu ra
Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.
1 2
Kết luận
Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.