เราได้รับสี่จำนวนเต็ม L, R, A และ B เป้าหมายคือการหาจำนวนตัวเลขในช่วง [L,R] ที่หาร A หรือ B หรือทั้งสองอย่างได้ทั้งหมด
เราจะทำสิ่งนี้โดยข้ามจาก L ไป R และสำหรับแต่ละตัวเลขถ้า number%A==0 หรือ number%B==0 ให้นับตัวหารเพิ่มขึ้น
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − L=10, R=15, A=4, B=3
ผลผลิต − การนับตัวหารของ A หรือ B − 2
คำอธิบาย −
Number 12 is fully divisible by 3 and 4. Number 15 is fully divisible by 3 only. Total divisors=2
ป้อนข้อมูล − L=20, R=30, A=17, B=19
ผลผลิต − การนับตัวหารของ A หรือ B − 0
คำอธิบาย − ไม่มีตัวเลขระหว่าง 20 ถึง 30 ที่หารด้วย A หรือ B ลงตัว หรือทั้งสองอย่าง
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราได้นำตัวแปร A, B, L และ R มา 4 ตัว
-
ฟังก์ชัน countDivisors(int l, int r, int a, int b) รับทั้งหมดเป็นอินพุตและส่งกลับตัวหารของ A หรือ B หรือทั้งสองอย่างอยู่ในช่วง [L, R]
-
นับเริ่มต้นเป็น 0
-
เริ่มจาก i=L ถึง i=R ถ้า i%a==0 หรือ i%b==0 นับการเพิ่มขึ้น
-
เมื่อสิ้นสุดลูปให้นับเป็นตัวหารของ A หรือ B
-
ผลตอบแทนนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int countDivisors(int l, int r, int a,int b){ int count = 0; for (int i = l; i <= r; i++){ if(i%a==0 || i%b==0) { count++ ; } } return count; } int main(){ int L=5; int R=15; int A=2; int B=5; cout <<endl<< "Total divisors of A and B : "<<countDivisors(L,R,A,B); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Total divisors of A and B : 7