Hỏi về vòng lặp for trong c++

Kiểm tra xem số nguyên n có thể phân tích thành tổng 2 số chính phương không?
ví dụ: 8=4+4 (yes), 7 (no)

Tạo một hàm check một số có phải là số chính phương hay không. :slight_smile:

Rồi kiểm tra với từng cặp số (i, n - i) (i từ 1 cho đến n / 2) là ok.

Code
#include <iostream>

bool isSquare(int n) {
    for (int i = 1; i * i <= n; i++)
        if (!(n % i) && (n / i == i)) return true;
    return false;
}

bool isSumOfTwoSquare(int n) {
    for (int i = 1; i <= n / 2; i++)
        if (isSquare(i) && isSquare(n - i)) return true;
    return false;
}

int main() {
    int n = 0;
    std::cin >> n;
    if (isSumOfTwoSquare(n)) std::cout << "yes\n";
    else std::cout << "no\n";
    return 0;
}
3 Likes

em đã biết cách rồi ạ! Vô cùng cảm ơn!:+1::+1::+1:

nếu như không dùng cách tạo hàm check, thì có cách nào làm bài này không ạ? Với vòng lập for.

Chiều theo ý bạn nè. :slight_smile:

#include <iostream>
#include <cmath>

int main() {
    int n = 0, i = 0;
    std::cin >> n;

    for (i = 1; i <= n / 2; i++) {
        int sqrtI = sqrt(i);
        int sqrtNi = sqrt(n - i);
        if (sqrtI * sqrtI + sqrtNi * sqrtNi == n) {
            std::cout << "yes\n";
            break;
        }
    }
    if (i > n / 2) std::cout << "no\n";
    return 0;
}
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?