এই সেকশনে আমরা আরেকটি আকর্ষণীয় সমস্যা দেখব। মনে করুন у нас N এলিমেন্টের একটি অ্যারে আছে। আমাদের এই অ্যারেকে কো-প্রাইম অ্যারে বানাতে হলে ন্যূনতম কতগুলো ইন্টারসেকশন পয়েন্ট ইনসার্ট করতে হবে তা বের করতে হবে। কো-প্রাইম অ্যারেতে প্রতিটি দুটি লগাতার এলিমেন্টের GCD ১ হবে। আমাদের অ্যারেটিও প্রিন্ট করতে হবে।
মনে করুন у нас এলিমেন্ট গুলো আছে {5, 10, 20}। এটি কো-প্রাইম অ্যারে নয়। এখন ৫, ১০ এবং ১০, ২০ এর মাঝপথে ১ ইনসার্ট করলে এটি কো-প্রাইম অ্যারে হয়ে যাবে। তাহলে অ্যারেটি হবে {5, 1, 10, 1, 20}
অ্যালগরিদম
makeCoPrime(arr, n):
শুরু
count := 0
i = 1 থেকে n পর্যন্ত, করো
যদি arr[i] এবং arr[i-1]-এর GCD ১ না হয়, তবে count ১ বাড়াও
শেষ
count মান ডিসপ্লে করো
arr-এর প্রথম এলিমেন্ট ডিসপ্লে করো
i = 1 থেকে n পর্যন্ত, করো
যদি arr[i] এবং arr[i-1]-এর GCD ১ না হয়, তবে ১ ডিসপ্লে করো
এলিমেন্ট arr[i] ডিসপ্লে করো
শেষ
শেষ
উদাহরণ (C++ কোড)
#include <iostream>
#include <algorithm>
using namespace std;
int makeCoPrime(int arr[], int n) {
int count = 0;
for(int i = 1; i < n; i++) {
if(__gcd(arr[i], arr[i - 1]) != 1) {
count++;
}
}
cout << "Number of intersection points: " << count << endl;
cout << arr[0] << " ";
for(int i = 1; i < n; i++) {
if(__gcd(arr[i], arr[i - 1]) != 1) {
cout << 1 << " ";
}
cout << arr[i] << " ";
}
}
int main() {
int A[] = {2, 7, 28};
int n = sizeof(A)/sizeof(A[0]);
makeCoPrime(A, n);
}
আউটপুট
Number of intersection points: 1 2 7 1 28