Đếm các nghiệm nguyên dương của phương trình ax + by + cz = d

Đếm nghiệm 2: Viết chương trình đếm các nghiệm nguyên dương của phương trình: ax+by+cz=d, với a, b, c, d là các số nguyên dương có giá trị không vượt quá 10^5.
Input: Một dòng duy nhất chứa bốn số a, b, c, d.
Output: Ghi ra số lượng các bộ nghiệm của phương trình đã cho.
Sample Input : 1 1 1 3
Sample Output : 1

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

int main()
{
    int a,b,c,d,x,y,z;
    cin >> a >> b >> c >> d;
    int dem = 0;

    for (x = 1 ; x <= (d - b - c)/a ; ++x)
        for (y = 1; y <= (d - a * x - c) / b ; ++y)
            for (z = 1; z <= (d - (a * x) - (b * y)) /c ; ++z)
              if (a * x + b * y + c * z == d)
               dem ++;
    cout  << dem;
}

Làm thế nào để code chạy nhanh hơn vậy ạ?

Bạn bỏ bớt vòng for z và kiểm tra xem d - a * x - b * y có tạo được z nguyên dương hay không nhé.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?