Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับค่าที่เป็นไปได้ทั้งหมดของ X โดยที่ A % X =B ใน C++


กำหนดจำนวนเต็ม A และ B และจำนวน X สองจำนวน เป้าหมายคือการหาจำนวนค่าที่ X สามารถมีได้ ดังนั้น A%X=B สำหรับสมการข้างบนนี้ ถ้า A==B มีค่าอนันต์ของ X ได้ ดังนั้นให้คืนค่า -1 ถ้า A B คืนค่าจำนวนตัวหารของ (AB) เป็นผลลัพธ์

ตัวอย่าง

อินพุต

A=5, B=2

ผลลัพธ์

นับค่าที่เป็นไปได้ทั้งหมดของ X โดยที่ A % X =B คือ 1

คำอธิบาย

<ก่อน>5%3=2. X คือ 3 ที่นี่

อินพุต

A=10, B=10

ผลลัพธ์

นับค่าที่เป็นไปได้ทั้งหมดของ X โดยที่ A % X =B คือ -1

คำอธิบาย

ที่นี่ A==B ดังนั้นจึงมีคำตอบที่ไม่สิ้นสุด ดังนั้น −1 จึงถูกส่งกลับ

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

ในแนวทางนี้ เราจะคำนวณตัวหารของ (A−B) โดยใช้ for loop จาก i=1 ถึง i*i<=(A−B) หากมีตัวใดตัวหนึ่งหารเต็ม (A−B) ให้อัปเดตการนับตามนั้น

  • ใช้จำนวนเต็ม A และ B เป็นอินพุต

  • ถ้า A

  • ถ้า A==B ให้พิมพ์ -1 เป็นผลลัพธ์

  • สำหรับ A>B ฟังก์ชัน possible_values(int A, int B) รับ A และ B และคืนค่าการนับค่าที่เป็นไปได้ทั้งหมดของ X เพื่อให้ A % X =B

  • นับเริ่มต้นเป็น 0 และ X=A−B.

  • สำรวจโดยใช้ for loop จาก i=1 ถึง i*i<(A−B) สำหรับการคำนวณตัวหารของ X

  • หากมี i หาร X ทั้งหมดแล้วให้ใช้ temp=i, temp_2=B-1 และถ้า i*i!=X ตั้งค่า temp_2 =X / i.

  • หาก temp> B และ temp_2>B ก็นับการเพิ่มขึ้น

  • เมื่อสิ้นสุดการวนซ้ำจะนับเป็นผลลัพธ์

ตัวอย่าง

#include ใช้เนมสเปซ std;int possible_values(int A, int B){ จำนวนเต็ม =0; int X =A - B; สำหรับ (int i =1; i * i <=A - B; i++){ if(X % i ==0){ int temp =i; int temp_2 =B - 1; ถ้า(i * i !=X){ temp_2 =X / i; } if(ชั่วคราว> B){ นับ++; } if(temp_2> B){ นับ++; } } } จำนวนการส่งคืน;}int main(){ int A =15, B =5; if(A  

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

นับค่าที่เป็นไปได้ทั้งหมดของ X โดยที่ A % X =B คือ 1