Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm tất cả các giá trị có thể của X sao cho A % X = B trong C++


Cho hai số nguyên A và B và một số X. Mục tiêu là tìm số lượng các giá trị mà X có thể có sao cho A % X = B. Đối với phương trình trên, nếu A == B thì có vô số giá trị của X, nên trả về -1. Nếu A < B thì không có nghiệm nên trả về 0. Nếu A > B thì trả về số lượng ước số của (A-B) làm kết quả.

Ví dụ

Đầu vào

A=5, B=2

Đầu ra

Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: 1

Giải thích

5%3=2. Vậy X là 3 ở đây.

Đầu vào

A=10, B=10

Đầu ra

Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: -1

Giải thích

Ở đây A==B nên có vô số nghiệm nên trả về -1.

Phương pháp sử dụng

Trong phương pháp này, chúng ta sẽ tính các ước số của (A-B) bằng vòng lặp for từ i=1 đến i*i <= (A-B). Nếu bất kỳ i nào chia hết (A-B) thì cập nhật biến đếm tương ứng.

  • Nhận các số nguyên A và B làm đầu vào.
  • Nếu A < B thì in 0 làm kết quả.
  • Nếu A == B thì in -1 làm kết quả.
  • Đối với A > B, hàm possible_values(int A, int B) nhận A và B và trả về số lượng tất cả các giá trị có thể của X sao cho A % X = B.
  • Khởi tạo biến đếm ban đầu là 0 và X = A - B.
  • Duyệt bằng vòng lặp for từ i=1 đến i*i <= (A-B) để tính các ước số của X.
  • Nếu bất kỳ i nào chia hết X thì lấy temp = i, temp_2 = B - 1 và nếu i*i != X thì đặt temp_2 = X / i.
  • Nếu temp > B và temp_2 > B thì tăng biến đếm.
  • Cuối cùng của vòng lặp trả về biến đếm làm kết quả.

Ví dụ mã

#include <bits/stdc++.h> 
using namespace std; 

int possible_values(int A, int B) {
    int count = 0;
    int X = A - B;
    
    for (int i = 1; i * i <= X; i++) {
        if (X % i == 0) {
            int temp = i;
            int temp_2 = B - 1;
            
            if (i * i != X) {
                temp_2 = X / i;
            }
            
            if (temp > B) {
                count++;
            }
            if (temp_2 > B) {
                count++;
            }
        }
    }
    
    return count;
}

int main() {
    int A = 15, B = 5;
    
    if (A < B) {
        cout << "Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: " << 0;
    } else if (A == B) {
        cout << "Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: " << -1;
    } else {
        cout << "Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: " << possible_values(A, B);
    }
    
    return 0;
}

Đầu ra

Nếu chạy mã trên, sẽ tạo ra đầu ra sau:

Số lượng tất cả các giá trị có thể của X sao cho A % X = B là: 1