LATEST

Thuật toán kiểm tra số nguyên tố trong C / C++

Trong bài viết này, codehow sẽ giới thiệu đến các bạn thuật toán kiểm tra số nguyên tố trong C / C++. Khi bắt đầu học ngôn ngữ lập trình thì các bạn cần phải biết đến khái niệm thuật toán, vì đây là giải thuật giúp các bạn lập trình nhanh hơn.

Trước khi đi vào tìm hiểu cách viết thuật toán, các bạn cùng mình tìm hiểu qua khái niệm số nguyên tố là gì đã nhé.

Số nguyên tố là gì?

Số nguyên tố là một số tự nhiên lớn hơn, chỉ chia hết cho 1 và chính nó. Hoặc nói cách khác thì số nguyên tố chỉ có ước là 1 và chinh nó mà thôi.

Ví dụ: Các số nguyên tố {2, 3, 5, 7, 11, ...}

Trong các số nguyên tố thì số 2 là số chẵn duy nhất. Và số nguyên tố là một dãy vô hạn, nghĩa là không có số nguyên tố lớn nhất.

Ví dụ ta có số 5 là số nguyên tố, bởi vì trong khoản từ 2 đến 7 nó chỉ chia hết cho chính nó mà thôi.

Thuật toán kiểm tra số nguyên tố trong C / C++

Qua phần một thì các bạn cũng đã hiểu sơ qua về số nguyên tố là gì và một số tính chất đặc biệt của nó rồi đúng không ạ.

Vậy bây giờ, chúng ta cùng tìm hiểu về thuật toán kiểm tra số nguyên tố trong C / C++ thôi nào.

Cách 1: Lặp từng phần tử với bước nhảy 1

Dưới đây là thuật toán kiểm tra số n có phải là số nguyên tố hay không, nếu phải thì return true và ngược lại thì return false.

bool laSoNguyenTo1(int n)
{
    if (n < 2){
        return false;
    }       
    for (int i = 2; i < (n - 1); i++){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

Giải thích thuật toán:

  1. Kiểm tra điều kiện nếu n < 2 thì return false vì đây không phải là số nguyên tố.
  2. Sử dụng vòng lặp for với bước nhảy 1, lặp từ 2 đến n - 1. Nếu tồn tại một số nào mà n chia hết thì return false, ngược lại thì return true.

Cách 2: Lặp từng phần tử với bước nhảy 2

Như đã nói ở phần một, trong các số nguyên tố thì số 2 là số chẵn duy nhất. Vì vậy ta có thể loại bỏ số 2 ra khỏi vòng lặp và bắt đầu lặp các số lẻ từ 3 mà thôi. Cách này sẽ tối ưu hơn rất nhiều so với cách một vì nó chỉ lặp bằng một nữa so với cách một.

bool laSoNguyenTo2(int n)
{
    if (n < 2){
        return false;
    }       
    if (n == 2){
        return true;
    }
    if (n % 2 == 0){
        return false;   
    }
    for (int i = 3; i < (n - 1); i += 2){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

Giải thích thuật toán:

  1. Kiểm tra nếu n < 2 thì đây không phải là số nguyên tố.
  2. Nếu n = 2 thì đây là số nguyên tố.
  3. Nếu n % 2 == 0 (là số chẵn) thì không phải là số nguyên tố.
  4. Sử dụng vòng lặp for với bước nhảy 2, bắt đầu từ 3 đến n - 1. Nếu tồn tại số nào mà n chia hết thì đó không phải là số nguyên tố, ngược lại là số nguyên tố.

*Lưu ý: Để tối ưu hơn nữa ta có thể sử dụng điều kiện dừng của vòng lặp là n / 2 thay vì n - 1, vì một số sẽ không bai giờ chia hết cho số lớn hơn một nữa của nó.

Ví dụ thuật toán kiểm tra số nguyên tố trong C / C++

Trong phần này mình sẽ thực hiện ví dụ sử dụng thuật toán kiểm tra số nguyên tố trong C / C++. Mình sẽ sử dụng hai thuật toán ở phần trên để làm ví dụ, các bạn có thể tham khảo nhé !!!

Ví dụ 1: Sử dụng thuật toán kiểm tra số nguyên tố trong C / C++ với bước nhảy một để kiểm tra số người dùng nhập có phải là số nguyên tố hay không.

Chương trình C:

#include <stdio.h>
#include <stdbool.h>
bool laSoNguyenTo1(int n)
{
    if (n < 2){
        return false;
    }       
    for (int i = 2; i < (n - 1); i++){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

int main(void) {
  int n;
    printf("Nhập vào số cần kiểm tra: ");
    scanf("%d", &n);
    if (laSoNguyenTo1(n)){
        printf("%d là số nguyên tố.",n);
    }
    else {
        printf("%d không phải là số nguyên tố.",n);
    }

  printf("\n----------------------------------\n");
  printf("Chương trình này được đăng tại codehow.net");
  return 0;
}

Kết quả:

bai1 02 PNG

Chương trình C++:

#include <iostream>
using namespace std;
bool laSoNguyenTo1(int n)
{
    if (n < 2){
        return false;
    }       
    for (int i = 2; i < (n - 1); i++){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

int main() {
  int n;
    cout << "Nhập vào số cần kiểm tra: ";
    cin >> n;
    if (laSoNguyenTo1(n)){
        cout <<n<< " là số nguyên tố.";
    }
    else {
        cout <<n<< " không phải là số nguyên tố";
    }

  cout<<"\n----------------------------------\n";
  cout<<"Chương trình này được đăng tại codehow.net";
  return 0;
}

Kết quả:

bai1 01 PNG

Ví dụ 2: Sử dụng thuật toán kiểm tra số nguyên tố trong C / C++ với bước nhảy hai để kiểm tra số người dùng nhập có phải là số nguyên tố hay không.

Chương trình C:

#include <stdio.h>
#include <stdbool.h>
bool laSoNguyenTo2(int n)
{
    if (n < 2){
        return false;
    }       
    if (n == 2){
        return true;
    }
    if (n % 2 == 0){
        return false;   
    }
    for (int i = 3; i < (n - 1); i += 2){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

int main(void) {
  int n;
    printf("Nhập vào số cần kiểm tra: ");
    scanf("%d", &n);
    if (laSoNguyenTo2(n)){
        printf("%d là số nguyên tố.",n);
    }
    else {
        printf("%d không phải là số nguyên tố.",n);
    }

  printf("\n----------------------------------\n");
  printf("Chương trình này được đăng tại codehow.net");
  return 0;
}

Kết quả:

bai1 04 PNG

Chương trình C++:

#include <iostream>
using namespace std;
bool laSoNguyenTo2(int n)
{
    if (n < 2){
        return false;
    }       
    if (n == 2){
        return true;
    }
    if (n % 2 == 0){
        return false;   
    }
    for (int i = 3; i < (n - 1); i += 2){
        if (n % i == 0){
            return false;
        }   
    }
    return true;
}

int main() {
  int n;
    cout << "Nhập vào số cần kiểm tra: ";
    cin >> n;
    if (laSoNguyenTo2(n)){
        cout <<n<< " là số nguyên tố.";
    }
    else {
        cout <<n<< " không phải là số nguyên tố";
    }

  cout<<"\n----------------------------------\n";
  cout<<"Chương trình này được đăng tại codehow.net";
  return 0;
}

Kết quả:

bai1 03 PNG

Như vậy là chúng ta đã cùng nhau tìm hiểu về giải thuật kiểm tra số nguyên tố trong C / C++. Các bạn hãy luyện tập thật nhiều để có thể sử dụng nó một cách thông thạo nhé, chúc các bạn thành công !!!

Cùng chuyên mục:

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tính lũy thừa trong C / C++

Top