In Ra Các Số Nguyên Tố Trong Mảng C/C++

ylliX - Online Advertising Network

Bài toán luyện tập số 13 là một bài toán về số nguyên tố trong C/C++. Bài toán rất phù hợp cho người mới bắt đầu học lập trình, bạn đọc đừng bỏ lỡ nhé!

Mục lục bài viết

  • 1. Giới thiệu bài toán
  • 2. Giải quyết bài toán
    • 2.1 Hàm kiểm tra số nguyên tố trong C/C++
      • Dùng vòng lặp for để kiểm tra số nguyên tố
    • 2.2 Hàm in ra số nguyên tố có trong mảng
    • 2.3 Chương trình in ra các số nguyên tố có trong mảng C/C++

1. Giới thiệu bài toán

Đề bài:

Viết hàm in ra các số nguyên tố trong mảng 1 chiều a có n phần tử.

Đánh giá: Bài tập trên ở mức độ trung bình, tất cả mọi người mới bắt đầu học ngôn ngữ lập trình C/C++ đều có thể làm được.

2. Giải quyết bài toán

Yêu cầu:

Với đề bài này, bạn đọc cần nắm vững một chút kiến thức về ngôn ngữ lập trình C/C++ (bạn đang thực hành ngôn ngữ nào thì sử dụng ngôn ngữ đó).

Biết cách sử dụng vòng lặp (for), sử dụng hàm và hiểu cấu trúc cơ bản của ngôn ngữ.

2.1 Hàm kiểm tra số nguyên tố trong C/C++

Tất cả các bài toán liên quan đến số nguyên tố, theo mình thấy đều phài viết hàm này. Viết hàm kiểm tra xem một số nguyên bất kì có phải là số nguyên tố hay không?

Trước tiên bạn phải hiểu định nghĩa thế nào là số nguyên tố:

Số nguyên tố là số chỉ chia hết cho một và chính nó.

Để nhận biết được có phải là số nguyên tố hay không, lập trình viên thường kiểm tra xem nó có chia hết cho số thứ 3 nào đó hay không?

Có hai cách để kiểm tra một số nguyên bất kì có phải là số nguyên tố hay không:

  • Dùng vòng lặp for để kiểm tra số đó có chia hết cho số thứ 3 hay không (phương pháp này đơn giản và được nhiều tác giả giới thiệu)
  • Dùng sàng số nguyên tố ( phương pháp này ít được giới thiệu nhưng tối ưu hơn phương pháp trên)

Trong bài này mình sẽ giới thiệu phương pháp thứ nhất, phương pháp thứ 2 mình sẽ dành riêng cho một bài viết

Dùng vòng lặp for để kiểm tra số nguyên tố

Cách này chúng ta sẽ sử dụng vòng lặp for cho chạy từ 2 cho đến n/2 hoặc sqrt(n/2). Giải thích: Vì số nguyên lớn nhất mà một số có thể chia hết là nửa của nó.

Code:

int ktrant(int n){ if(n<2) return 0; else{ for(int i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } }

int ktrant(int n){ if(n<2) return 0; else{ for(int i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } }

return 1 tức là đúng, return 0 tương đương với sai.

2.2 Hàm in ra số nguyên tố có trong mảng

Hàm này rất đơn giản, mình cho chạy một vòng for duyệt mảng, nếu số nào thỏa mãn điều kiện là số nguyên tố (sử dụng hàm ở phía trên) tiến hành in ra màn hình.

Code C:

void insonguyento(int a[], int n){ printf(“\nCac so nguyen to co trong mang la: \n”); for(int i=0;i<n;i++) if(ktrant(a[i])) printf(“%5d”,a[i]); }

void insonguyento(int a[], int n){ printf(“\nCac so nguyen to co trong mang la: \n”); for(int i=0;i

Code C++:

C và C++ chỉ khác nhau phần câu lệnh nhập xuất, về cú pháp vẫn giống nhau. C++ được hỗ trợ nhiều thư viện hơn và nó là ngôn ngữ lập trình hướng đối tượng.

void insonguyento(int a[], int n){ cout<<“\nCac so nguyen to co trong mang: “<<endl; for(int i=0;i<n;i++) if(ktrant(a[i])) cout<<a[i]<<” “; }

2.3 Chương trình in ra các số nguyên tố có trong mảng C/C++

void insonguyento(int a[], int n){ cout<<“\nCac so nguyen to co trong mang: “<

Các bạn cần thêm phần nhập xuất mảng và cấu trúc cơ bản của một chương trình để giải bài tập này nhé!

Code C:

#include<stdio.h> void nhap(int a[], int &n){ do{ printf(“Nhap n: “); scanf(“%d”,&n); } while(n<2||n>99); for(int i=0; i<n; i++){ printf(“a[%d]: “,i); scanf(“%d”,&a[i]); } } void xuat(int a[], int n){ for(int i=0;i<n;i++){ printf(“%5d”,a[i]); } } int ktrant(int n){ if(n<2) return 0; else{ for(int i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } } void insonguyento(int a[], int n){ printf(“\nCac so nguyen to co trong mang la: \n”); for(int i=0;i<n;i++) if(ktrant(a[i])) printf(“%5d”,a[i]); } int main(){ int a[100]; int n; nhap(a,n); insonguyento(a,n); return 0; }

#include void nhap(int a[], int &n){ do{ printf(“Nhap n: “); scanf(“%d”,&n); } while(n<2||n>99); for(int i=0; i

Code C++:

#include<bits/stdc++.h> using namespace std; void nhap(int a[], int &n){ do{ cout<<(“Nhap n: “); cin>>n; } while(n<2||n>99); for(int i=0; i<n; i++){ cout<<“a[“<<i<<“]: “; cin>>a[i]; } } void xuat(int a[], int n){ for(int i=0;i<n;i++){ cout<<” “<<a[i]; } } int ktrant(int n){ if(n<2) return 0; else{ for(int i=2;i<=n/2;i++) if(n%i==0) return 0; return 1; } } void insonguyento(int a[], int n){ cout<<“\nCac so nguyen to co trong mang: “<<endl; for(int i=0;i<n;i++) if(ktrant(a[i])) cout<<a[i]<<” “; } int main(){ int a[100]; int n; nhap(a,n); insonguyento(a,n); return 0; }

#include using namespace std; void nhap(int a[], int &n){ do{ cout<<(“Nhap n: “); cin>>n; } while(n<2||n>99); for(int i=0; i>a[i]; } } void xuat(int a[], int n){ for(int i=0;i

Kết quả của chạy chương trình trên

in ra cac so nguyen to co trong mang

Như vậy là chúng ta đã giải quyết xong bài toán in ra các phần tử là số nguyên tố trong mảng một chiều bằng ngôn ngữ C/C++. Cảm ơn bạn đã quan tâm bài viết, đừng bỏ lỡ những bài tập tiếp theo nhé!

Xem tiếp bài 14: Xóa các số nguyên tố trong mảng

Xem lại bài 12: Sắp xếp mảng theo thứ tự giảm dần

Tải về 67 bài tập đề cương lập trình C/C++

Mọi vấn đề thắc mắc hay đóng góp ý kiến giúp mình hoàn thiện bài viết, bạn đọc để lại comment phía dưới.

ylliX - Online Advertising Network