Bạn đang tìm cách viết một chương trình C để tìm tất cả các **số nguyên tố** trong một phạm vi nhất định? Bài viết này sẽ hướng dẫn bạn từng bước cách thực hiện điều đó, đồng thời cung cấp các giải thích chi tiết để bạn hiểu rõ hơn về thuật toán và cách tối ưu hóa code. Việc tìm **số nguyên tố trong C** không chỉ là một bài tập lập trình cơ bản mà còn là cơ hội để bạn nắm vững các khái niệm quan trọng trong lập trình và thuật toán.
Trước khi bắt đầu viết code, hãy cùng nhau ôn lại khái niệm **số nguyên tố**. Một số nguyên tố là một số tự nhiên lớn hơn 1, chỉ chia hết cho 1 và chính nó. Ví dụ: 2, 3, 5, 7, 11, 13,... là các số nguyên tố.
Để tìm **số nguyên tố** trong một phạm vi cho trước (ví dụ: từ 2 đến 100), chúng ta có thể sử dụng một thuật toán đơn giản: duyệt qua từng số trong phạm vi đó và kiểm tra xem số đó có phải là số nguyên tố hay không. Để kiểm tra một số có phải là số nguyên tố hay không, ta chỉ cần kiểm tra xem số đó có chia hết cho bất kỳ số nào từ 2 đến căn bậc hai của nó hay không. Nếu không chia hết cho số nào trong phạm vi đó, thì số đó là số nguyên tố.
Dưới đây là một đoạn code C cơ bản để tìm các **số nguyên tố từ 2 đến 100**:
#include <stdio.h>
int prime(int n) {
int j;
for (j = 2; j <= n / 2; j++) {
if ((n % j) == 0) {
return 0;
} else {
return 1;
}
}
return 1; // Thêm dòng này để xử lý trường hợp n <= 1
}
int main() {
int i, p;
for (i = 2; i <= 100; i++) {
p = prime(i);
if (p == 1) {
printf("%d \n", i);
}
}
return 0;
}
Tuy nhiên, đoạn code trên có một lỗi nhỏ. Hàm `prime()` sẽ luôn trả về sau lần lặp đầu tiên. Để sửa lỗi này, ta cần thay đổi cấu trúc của hàm như sau:
#include <stdio.h>
int prime(int n) {
int j;
for (j = 2; j <= n / 2; j++) {
if ((n % j) == 0) {
return 0; // Nếu chia hết, không phải số nguyên tố
}
}
return 1; // Nếu không chia hết cho số nào, là số nguyên tố
}
int main() {
int i;
for (i = 2; i <= 100; i++) {
if (prime(i)) {
printf("%d \n", i);
}
}
return 0;
}
#include <stdio.h>
: Khai báo thư viện chuẩn để sử dụng các hàm nhập/xuất dữ liệu (ví dụ: `printf`).prime(int n)
:
main()
:
prime()
để kiểm tra xem mỗi số có phải là số nguyên tố hay không.Chúng ta có thể tối ưu hóa code trên bằng cách:
Đây là đoạn code đã được tối ưu hóa:
#include <stdio.h>
#include <math.h>
int isPrime(int n) {
if (n <= 1) return 0;
if (n <= 3) return 1;
if (n % 2 == 0 || n % 3 == 0) return 0;
for (int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return 0;
return 1;
}
int main() {
int n = 100;
for (int i = 2; i <= n; i++) {
if (isPrime(i))
printf("%d ", i);
}
return 0;
}
Trong bài viết này, chúng ta đã tìm hiểu cách viết chương trình C để tìm **số nguyên tố từ 2 đến 100**. Chúng ta cũng đã thảo luận về cách tối ưu hóa code để tăng hiệu suất. Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về **thuật toán tìm số nguyên tố trong C** và cách áp dụng nó vào các bài toán lập trình khác. Chúc bạn thành công trên con đường chinh phục lập trình!
Bài viết liên quan