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

Đếm cặp (a, b) có tổng lập phương bằng N (a³ + b³ = N) trong C++


Cho một số N. Mục tiêu là tìm các cặp có thứ tự của số dương sao cho tổng lập phương của chúng bằng N.

Ta thực hiện bằng cách tìm nghiệm của phương trình a³ + b³ = N. Trong đó a không lớn hơn căn bậc ba của N và b có thể tính là căn bậc ba của (N - a³).

Hãy hiểu qua các ví dụ.

Đầu vào

N=35

Đầu ra

Số cặp (a,b) mà a³+b³=N: 2

Giải thích

Các cặp: (2,3) và (3,2). 2³+3³=8+27=35

Đầu vào

N=100

Đầu ra

Số cặp (a,b) mà a³+b³=N: 0

Giải thích

Không có cặp nào thỏa mãn.

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận số nguyên N.
  • Hàm cubeSum(int n) nhận n và trả về số cặp có thứ tự với tổng lập phương bằng n.
  • Khởi tạo biến count = 0 cho cặp.
  • Duyệt bằng vòng lặp for để tìm a.
  • Bắt đầu từ a=1 đến a<=cbrt(n) là căn bậc ba của n.
  • Tính lập phương b: n - pow(a,3).
  • Tính b = cbrt(bcube).
  • Nếu pow(b,3) == bcube. Tăng count 1.
  • Sau tất cả vòng lặp count chứa tổng số cặp như vậy.
  • Trả về count làm kết quả.

Ví dụ

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

int cubeSum(int n) {
    int count = 0;
    for (int a = 1; a < cbrt(n); a++) {
        int bcube = n - (pow(a,3));
        int b = cbrt(bcube);
        if(pow(b,3) == bcube) {
            count++;
        }
    }
    return count;
}

int main() {
    int N = 35;
    cout << "Số cặp (a,b) mà a³+b³=N: " << cubeSum(N);
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Số cặp (a,b) mà a³+b³=N: 2