DATAONLINE.IO.VN

https://365.io.vn

Minh họa sàng nguyên tố

Sàng Eratosthenes dùng để tìm các số nguyên tố nhỏ hơn hoặc bằng số nguyên N nào đó. Nó còn có thể được sử dụng để kiểm tra một số nguyên nhỏ hơn hoặc bằng N hay không.

Minh họa sàng nguyên tố

Định nghĩa số nguyên tố
Số nguyên tố là số nguyên dương có duy nhất 2 ước phân biệt là 1 và chính nó. Số nguyên tố nhỏ nhất là số 2.
Ý tưởng của thuật toán sàng nguyên tố Eratosthenes
Dựa theo lý thuyết về số nguyên tố: Một số nguyên tố là số chỉ có 2 ước là 1 và chính nó. Do vậy, nếu ta xác định được số x là số nguyên tố, ta có thể kết luận mọi số chia hết cho x đều không phải số nguyên tố. Do đó ta đã loại bỏ được rất nhiều số mà không cần kiểm tra.
Ví dụ:
Số 2 là số nguyên tố => các số 4, 6, 8, 10, ... không phải số nguyên tố.
Số 3 là số nguyên tố => các số 9, 15, 21, ... không phải số nguyên tố. (Do 6, 12, 18 đã bị loại ở số 2)
Thuật toán sàng nguyên tố Eratosthenes
Tạo mảng đánh dấu cho tất cả các phần tử từ 2 đến N và mặc định tất cả đều là số nguyên tố
Xét số đầu tiên tìm được là số nguyên tố – giả sử x, đánh dấu tất cả các bội của x: 2x, 3x, 4x,… trong đoạn [x, N] không phải số nguyên tố.
Tìm số tiếp theo được đánh dấu là số nguyên tố trong [x, N]. Nếu không còn số nào, thoát chương trình. Nếu còn, gán nó bằng x và lặp lại bước 2.
Khi kết thúc giải thuật, các số không bị đánh dấu là các số nguyên tố.

Cài đặt thuật toán sàng nguyên tố
- C++

#include <iostream>
using namespace std;
int main()
{
    int N = 1000;
    bool check[N + 1];
    //Danh dau tat ca cac so tu 2 den N deu la so nguyen to
    for (int i = 2; i <= N; i++)
    {
        check[i] = true;
    }
//Xet tu so dau tien tim duoc la so nguyen to, voi moi so tim duoc thi boi cua no khong phai la so nguyen to
    for (int i = 2; i <= N; i++)
    {
        if (check[i] == true)
        {
            for (int j = 2 * i; j <= N; j =j+ i)
            {
                check[j] = false;
            }
        }
    }
    //In ra cac so nguyen to tim duoc
    for (int i = 2; i <= N; i++)
    {
        if (check[i] == true)
        {
            cout<<i<<" ";
        }
    }
    return 0;
}

- Java

import java.util.*;import java.lang.*;import java.io.*;/* Name of the class has to be "Main" only if the class is public. */class Eratosthenes {  public static void main (String[] args) throws java.lang.Exception {    int N = 1000;    boolean[] check = new boolean[N + 1];    // Khởi tạo tất cả các số [2...N] đều là số nguyên tố    for (int i = 2; i <= N; i++) {      check[i] = true;    }    // Thuật toán sàng nguyên tố    // Nếu một số là số nguyên tố, thì tất cả các bội của nó không phải số nguyên tố    for (int i = 2; i <= N; i++) {      if (check[i] == true) {        for (int j = 2 * i; j <= N; j += i) {          check[j] = false;        }      }    }    // In ra các số là số nguyên tố    for (int i = 2; i <= N; i++) {      if (check[i] == true) {        System.out.print(i + " ");      }    }  }}

Nguồn tin: blog.luyencode.net

Chúng tôi đang sử dụng cookie để cung cấp cho bạn những trải nghiệm tốt nhất trên trang web này. Bằng cách tiếp tục truy cập, bạn đồng ý với Chính sách thu thập và sử dụng cookie của chúng tôi.
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây