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

Đếm cặp (a, b) có tổng bình 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 bình 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 hai của N và b có thể tính là căn bậc hai của (N - a²).

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

Đầu vào

N=100

Đầu ra

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

Giải thích

Các cặp: (6,8) và (8,6). 6²+8²=36+64=100

Đầu vào

N=11

Đầ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 squareSum(int n) nhận n và trả về số cặp có thứ tự với tổng bình 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<=sqrt(n) là căn bậc hai của n.
  • Tính bình phương b: n - pow(a,2).
  • Tính b = sqrt(bsquare).
  • Nếu pow(b,2) == bsquare. 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 squareSum(int n) {
    int count = 0;
    for (int a = 1; a <= sqrt(n); a++) {
        int bsquare = n - (pow(a,2));
        int b = sqrt(bsquare);
        if(pow(b,2) == bsquare) {
            count++;
            cout << a;
        }
    }
    return count;
}

int main() {
    int N = 5;
    cout << "Số cặp (a,b) mà a²+b²=N: " << squareSum(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: 122