เรามีหมายเลข 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