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)
Hỏi về vòng lặp for trong c++
Tạo một hàm check một số có phải là số chính phương hay không. 
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!


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è. 
#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?