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 < Bthì in 0 làm kết quả. - Nếu
A == Bthì in -1 làm kết quả. - Đối với
A > B, hàmpossible_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 choA % 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đếni*i <= (A-B)để tính các ước số của X. - Nếu bất kỳ
inào chia hết X thì lấytemp = i,temp_2 = B - 1và nếui*i != Xthì đặttemp_2 = X / i. - Nếu
temp > Bvàtemp_2 > Bthì 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