main frame
1.Số Chính Phương
Bạn đang xem: [C]. Số Chính Phương
Số chính phương là số bình phương của một số nguyên, ví dụ như các số 0, 1, 4, 25, 49, 100..
Phương pháp :
Giải thích : Khi N là số chính phương thì tính căn bậc 2 của N và lưu vào số nguyên sẽ 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 thì khi tính căn bậc 2 nhưng lưu vào số nguyên sẽ làm mất phần thập phân có ý nghĩa dẫn đến thay đổi giá trị của biến căn N và vì thế khi ta nhân ngược lại căn với căn sẽ không ra được N.
Ví dụ :
N = 20, can = √N = 4.472 = 4, can * can = 16 != 20 nên 20 không phải là số chính phương
N = 25, can = √N = 5.000 = 5, can * can = 25 == 25 nên 25 là số chính phương
Code :
#include “stdio.h” #include “math.h” int cp(int n){ int can = sqrt(n); if(can * can == n){ return 1; // dung } 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; }
Output :
NO YES
2. 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 các bạn làm tương tự
Code 1. Thuật toán ngây thơ
#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; }
Output :
1 4 9 16 25
Code 2 : Thuật toán tối ưu
Phân tích : Để liệt kê các số chính phương từ 1 tới n ta gọi số chính phương đó có dạng i2 trong đó i là một số nguyên
Từ đó ta có bất phương trình 1 ≤ i2 ≤ n => 1 ≤ i ≤ √n, vậy để in ra các số chính phương từ 1 tới n bạn chỉ cần duyệt các số i từ 1 tới √n và in ra bình phương của i là được.
#include “stdio.h” #include “math.h” int main(){ int n = 30; for(int i = 1; i <= sqrt(n); i++){ printf(“%d “, i * i); } return 0; }
Xem thêm : Điểm danh 7 hồ nước ngọt lớn nhất Việt Nam đẹp mê hồn say đắm
Bài 2. Liệt kê (đếm) các số chính phương từ a tới b.
Code 1. Thuật toán ngây thơ
#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 = a; i <= b; i++){ if(cp(i) == 1){ printf(“%d “, i); } } return 0; }
Output :
16 25 36 49
Code 2 : Thuật toán tối ưu
Phân tích : Để liệt kê các số chính phương từ a tới b ta gọi số chính phương đó có dạng i2 trong đó i là một số nguyên
Từ đó ta có bất phương trình a ≤ i2 ≤ b => √a ≤ i ≤ √b, vậy để in ra các số chính phương từ a tới b bạn chỉ cần duyệt các số i từ √a tới √b và in ra bình phương của i là được.
Bạn cần chú ý cận √a vì nó bị làm tròn xuống nên có thể dẫn đến kết quả bị sai.
#include “stdio.h” #include “math.h” int main(){ int a = 10, b = 50; int c1 = sqrt(a), c2 = sqrt(b); if(c1 * c1 < a){ ++c1; } for(int i = c1; i <= c2; i++){ printf(“%d “, i * i); } return 0; }
Xem theo bài giảng của mình về số chính phương :
Da0RIcvk5l0
Nguồn: https://luatduonggia.edu.vn
Danh mục: Tổng hợp
This post was last modified on 05/02/2024 10:31
Con số may mắn hôm nay 23/11/2024 theo năm sinh: Nhặt TIỀN từ con số…
Tử vi thứ bảy ngày 23/11/2024 của 12 con giáp: Tuổi Thìn chán nản, tuổi…
Vận may của 4 con giáp đang ngày càng xuống dốc. Cuối tuần này (23-24/11),…
Con số cuối cùng trong ngày sinh dự đoán con người sẽ GIÀU CÓ, sống…
Cuối tuần này (23-24/11), 4 con giáp sẽ gặp nhiều may mắn và thành công…
Tử vi hôm nay – Top 3 con giáp thịnh vượng nhất ngày 22/11/2024