Số chính phương là số bình phương của một số nguyên, như các số 0, 1, 4, 25, 49, 100… Phương pháp để xác định số chính phương như sau:
- Tính căn bậc 2 của số N và lưu căn vào một số nguyên, để loại bỏ phần thập phân của căn.
- So sánh tích của căn với chính nó và với số N. Nếu bằng nhau, thì N là số chính phương.
Khi N là số chính phương, tính căn bậc 2 của N và lưu vào số nguyên không làm thay đổi giá trị của biến căn, vì phần thập phần bằng 0. Ngược lại, N không phải là số chính phương, khi ta tính căn bậc 2 nhưng lưu vào số nguyên, thì mất phần thập phân có ý nghĩa và dẫn đến thay đổi giá trị của biến căn N. Vì thế, khi nhân ngược lại căn với căn, sẽ không ra được N.
Bạn đang xem: [C]. Số Chính Phương
Ví dụ:
- N = 20, căn = √N = 4.472 ≈ 4, căn * căn = 16 ≠ 20, nên 20 không phải là số chính phương.
- N = 25, căn = √N = 5.000 = 5, căn * căn = 25 == 25, nên 25 là số chính phương.
Để kiểm tra số chính phương trong code, ta có thể sử dụng đoạn code sau:
#include "stdio.h"
#include "math.h"
int cp(int n) {
int can = sqrt(n);
if (can * can == n) {
return 1; // đúng
}
else {
return 0; // sai
}
}
int main() {
if (cp(20) == 1) {
printf("YESn");
}
else {
printf("NOn");
}
if (cp(25) == 1)
printf("YESn");
else
printf("NOn");
return 0;
}
Xem thêm : Các loại dàn đề, tổng đặc biệt chẵn, lẻ trong lô đề
Kết quả của đoạn code trên là “NO YES”.
READ MORE:
Bài Tập Số Chính Phương
Bài 1: In ra các số chính phương từ 1 tới N
Đếm các số chính phương từ 1 tới N, bạn có thể sử dụng thuật toán sau:
#include "stdio.h"
#include "math.h"
int cp(int n) {
int can = sqrt(n);
if (can * can == n) {
return 1;
}
else {
return 0;
}
}
int main() {
int n = 30;
for (int i = 1; i <= n; i++) {
if (cp(i) == 1) {
printf("%d ", i);
}
}
return 0;
}
Kết quả của đoạn code trên là “1 4 9 16 25”.
Bài 2: Liệt kê các số chính phương từ a tới b
Để liệt kê các số chính phương từ a tới b, ta có thể sử dụng thuật toán sau:
#include "stdio.h"
#include "math.h"
int cp(int n) {
int can = sqrt(n);
if (can * can == n) {
return 1;
}
else {
return 0;
}
}
int main() {
int a = 10, b = 50;
for (int i = sqrt(a); i <= sqrt(b); i++) {
printf("%d ", i * i);
}
return 0;
}
Xem thêm : Câu hỏi trắc nghiệm ôn thi Tin học Cơ bản Tài liệu ôn thi chứng chỉ CNTT cơ bản
Để in ra các số chính phương từ a tới b, ta chỉ cần duyệt các số i từ căn bậc hai của a tới căn bậc hai của b và in ra bình phương của i.
Để lưu ý: Cân nhắc giá trị nhỏ hơn căn bậc hai của a, vì nó có thể bị làm tròn xuống và gây sai sót kết quả.
Kết quả của đoạn code trên là “16 25 36 49”.
Xem theo bài giảng của mình về số chính phương: Đây
Nguồn: https://ispacedanang.edu.vn
Danh mục: Học tập