เรามีหมายเลข 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 เป็นตัวแปรช่วง
-
ฟังก์ชัน divisiblebyArr(int start, int end, int arr[], int len) รับตัวแปรช่วงและอาร์เรย์ และส่งกลับจำนวนตัวเลขที่หารด้วยองค์ประกอบอาร์เรย์ทั้งหมดได้
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับตัวเลขดังกล่าว
-
ใช้แฟล็กตัวแปรเป็น 0
-
ข้ามช่วงของตัวเลขโดยใช้การวนซ้ำ i=start to i=end
-
ตอนนี้สำหรับแต่ละหมายเลข num=i ใช้ while loop ตรวจสอบว่าองค์ประกอบอาร์เรย์ทั้งหมดหารตัวเลขได้หรือไม่
-
หากองค์ประกอบทั้งหมดแบ่ง num ออกจนหมด ให้ตั้งค่า flag=1
-
ภายนอกในขณะที่ if flag=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 ขององค์ประกอบทั้งหมดของอาร์เรย์
-
คำนวณ LCM แรกเป็น getLCM(arr[0], arr[1]) หลังจากนั้นให้ค้นหา lcm ของ lcm ก่อนหน้าและ arr[i] โดยเรียก getLCM(lcm, arr[i]) โดยที่ i=2 ถึง i
-
ฟังก์ชัน divisiblebyArr(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