সংখ্যার একটি পরিসীমা সংজ্ঞায়িত করার জন্য আমাদেরকে START এবং END দুটি সংখ্যা দেওয়া হয়েছে। এবং ধনাত্মক সংখ্যার একটি অ্যারে Arr[]। লক্ষ্য হল Arr[] এর সমস্ত উপাদান দ্বারা বিভাজ্য এবং [START,END] রেঞ্জে থাকা সমস্ত সংখ্যা খুঁজে বের করা।
পদ্ধতি 1 ( সরল দৃষ্টিভঙ্গি )
আমরা START থেকে END পর্যন্ত সংখ্যাগুলি অতিক্রম করে এটি করব এবং প্রতিটি সংখ্যার জন্য আমরা অ্যারের সমস্ত উপাদান দ্বারা সংখ্যাটি বিভাজ্য কিনা তা পরীক্ষা করব। যদি হ্যাঁ ইনক্রিমেন্ট কাউন্ট।
পদ্ধতি 2 ( অ্যারের উপাদানগুলির LCM দ্বারা বিভাজ্যতা পরীক্ষা করুন)
আমরা সমস্ত অ্যারের উপাদানগুলির LCM খুঁজে পাব এবং তারপর পরিসরে [START,END] সমস্ত সংখ্যা পরীক্ষা করে গণনা করব যা সেই LCM দ্বারা সম্পূর্ণরূপে বিভাজ্য৷
উদাহরণ দিয়ে বোঝা যাক।
ইনপুট
START=1 END=20 Arr[]= { 2, 4, 8 } আউটপুট
Numbers that are divisible by all array elements: 2
ব্যাখ্যা
Numbers 8 and 16 are in the range that are divisible by all array elements.
ইনপুট
START=100 END=200 Arr[]= { 230, 321, 490, 521 } আউটপুট
Numbers that are divisible by all array elements: 0
ব্যাখ্যা
No number between 100 to 200 divisible by any array element.
পদ্ধতি 1 ( সরল দৃষ্টিভঙ্গি )
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমরা পরিসীমা ভেরিয়েবল হিসাবে একটি পূর্ণসংখ্যা START এবং END নিই।
-
ফাংশন দ্বারা বিভাজ্য করা যায় (int start, int end, int arr[], int len) রেঞ্জ ভেরিয়েবল এবং অ্যারে নেয় এবং সমস্ত অ্যারে উপাদান দ্বারা বিভাজ্য সংখ্যার গণনা প্রদান করে৷
-
এই ধরনের সংখ্যার জন্য প্রাথমিক পরিবর্তনশীল গণনা 0 হিসাবে নিন।
-
পরিবর্তনশীল পতাকাকে 0
হিসেবে নিন -
লুপ ব্যবহার করে সংখ্যার সীমা অতিক্রম করে। i=start to i=end
-
এখন প্রতিটি সংখ্যার জন্য num=i, যখন লুপ ব্যবহার করে সংখ্যাটি সমস্ত অ্যারে উপাদান দ্বারা বিভাজ্য কিনা তা পরীক্ষা করুন৷
-
যদি সমস্ত উপাদান সম্পূর্ণরূপে সংখ্যা ভাগ করে, তাহলে ফ্ল্যাগ=1 সেট করুন।
-
বাইরে থাকাকালীন যদি ফ্ল্যাগ=1 ইনক্রিমেন্ট গণনা
-
সমস্ত লুপ গণনার শেষে একটি মোট সংখ্যা থাকবে যা অ্যারের সমস্ত উপাদান দ্বারা বিভাজ্য৷
-
ফলাফল হিসাবে গণনা ফেরত দিন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int divisiblebyArr(int start, int end, int arr[], int len){
int count = 0;
int flag=0;
int index=0;
for (int i = start; i <= end; i++){
int num = i;
index=0;
while(index<len){
if(num % arr[index++] == 0)
{ flag=1; }
else{
flag=0;
break;
}
}
if (flag == 1)
{ count++; }
}
return count;
}
int main(){
int START = 5, END = 20;
int Arr[] = {2,4,8 };
int len=sizeof(Arr)/sizeof(Arr[0]);
cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len);
return 0;
} আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেNumbers that are divisible by all array elements: 2
পদ্ধতি 2 ( LCM পদ্ধতি )
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমরা পরিসীমা ভেরিয়েবল হিসাবে একটি পূর্ণসংখ্যা START এবং END নিই।
-
ফাংশন getLCM(int a, int b) দুটি সংখ্যা নেয় এবং তাদের মধ্যে LCM প্রদান করে প্রথম সংখ্যাটি খুঁজে বের করে যা উভয় while loop ব্যবহার করে বিভাজ্য।
-
ফাংশন getLCMArray(int arr[], int n) একটি অ্যারে এবং এর দৈর্ঘ্য ইনপুট হিসাবে নেয় এবং অ্যারের সমস্ত উপাদানের LCM প্রদান করে৷
-
getLCM(arr[0], arr[1]) হিসাবে প্রথম LCM গণনা করুন। এর পর পরপর গেটএলসিএম(lcm, arr[i]) কল করে আগের lcm এর lcm এবং arr[i] খুঁজুন যেখানে i=2 থেকে i
-
ফাংশন দ্বারা বিভাজ্য করা যায় (int start, int end, int arr[], int len) রেঞ্জ ভেরিয়েবল এবং অ্যারে নেয় এবং সমস্ত অ্যারে উপাদান দ্বারা বিভাজ্য সংখ্যার গণনা প্রদান করে৷
-
এই ধরনের সংখ্যার জন্য প্রাথমিক পরিবর্তনশীল গণনা 0 হিসাবে নিন।
-
পরিবর্তনশীল lcm কে getLCMArray(int arr[], int len) হিসাবে নিন।
-
লুপ ব্যবহার করে সংখ্যার সীমা অতিক্রম করে। i=start to i=end
-
এখন প্রতিটি সংখ্যা i এর জন্য, এটি বিভাজ্য lcm কিনা তা পরীক্ষা করুন। সত্য হলে, সংখ্যা বৃদ্ধি করুন।
-
সমস্ত লুপ গণনার শেষে একটি মোট সংখ্যা থাকবে যা অ্যারের সমস্ত উপাদান দ্বারা বিভাজ্য৷
-
ফলাফল হিসাবে গণনা ফেরত দিন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int getLCM(int a, int b){
int m;
m = (a > b) ? a : b;
while(true){
if(m % a == 0 && m % b == 0)
return m;
m++;
}
}
int getLCMArray(int arr[], int n){
int lcm = getLCM(arr[0], arr[1]);
for(int i = 2; i < n; i++){
lcm = getLCM(lcm, arr[i]);
}
return lcm;
}
int divisiblebyArr(int start, int end, int arr[], int len){
int count = 0;
int flag=0;
int lcm=getLCMArray(arr,len);
for (int i = start; i <= end; i++){
if(i%lcm==0)
{ count++; }
}
return count;
}
int main(){
int START = 5, END = 20;
int Arr[] = {2,4,8 };
int len=sizeof(Arr)/sizeof(Arr[0]);
cout <<"Numbers that are divisible by all array elements: "<< divisiblebyArr(START,END,Arr,len);
return 0;
} আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেNumbers that are divisible by all array elements: 2