# Trình tạo số nguyên tố

> Liệt kê số nguyên tố trong một phạm vi hoặc chọn ngẫu nhiên N số bằng sàng Eratosthenes. Tính toán tức thì trong trình duyệt, miễn phí.

URL: https://acrafto.com/vi/bo-tao-so-nguyen-to-truc-tuyen/

Tools are interactive browser apps; there is no public API, no endpoints to call and no server-side processing. To use a tool, open its HTML page in a browser.

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

**Số nguyên tố** là số tự nhiên lớn hơn 1, chỉ chia hết cho 1 và chính nó. Các số nguyên tố nhỏ nhất là 2, 3, 5, 7, 11, 13, 17, 19, 23, 29… Số 2 là số nguyên tố chẵn duy nhất – tất cả các số chẵn khác đều chia hết cho hai.

Các số như 4 (= 2 × 2), 6 (= 2 × 3) hoặc 15 (= 3 × 5) **không phải** là số nguyên tố – chúng ta gọi chúng là số hợp số.

## Trình tạo hoạt động như thế nào?

Để liệt kê tất cả các số nguyên tố trong một phạm vi, chúng tôi sử dụng **Sàng Eratosthenes** – một trong những thuật toán lâu đời và hiệu quả nhất, được nhà toán học Hy Lạp Eratosthenes xứ Cyrene mô tả vào khoảng năm 240 TCN.

Thuật toán này dần dần loại bỏ các bội số của mỗi số nguyên tố tìm được. Những gì còn lại là số nguyên tố. Toàn bộ quá trình tính toán diễn ra **trực tiếp trong trình duyệt của bạn** – không có dữ liệu nào được gửi đến máy chủ.

Để chọn ngẫu nhiên, trình tạo trước tiên xây dựng một danh sách tất cả các số nguyên tố trong phạm vi, sau đó chọn ngẫu nhiên số lượng yêu cầu từ danh sách đó bằng cách sử dụng bộ tạo an toàn về mặt mật mã (`crypto.getRandomValues()`).

## Tính năng của trình tạo

- **Tất cả số nguyên tố** – liệt kê mọi số nguyên tố trong phạm vi đã cho (tối đa 10.000)
- **Chọn ngẫu nhiên** – chọn N số nguyên tố ngẫu nhiên từ phạm vi (thích hợp cho các phạm vi lớn)
- **Sắp xếp** – sắp xếp kết quả theo thứ tự tăng dần
- **Dấu phân cách** – chọn cách các số sẽ được phân tách khi sao chép
- **Thiết lập nhanh** – các phạm vi phổ biến nhất chỉ với một cú nhấp chuột

## Số nguyên tố được sử dụng ở đâu?

### Mật mã và bảo mật

Số nguyên tố là nền tảng của mật mã hiện đại. Các thuật toán như **RSA** hoạt động dựa trên nguyên tắc rằng việc tính tích của hai số nguyên tố lớn là dễ dàng, nhưng việc phân tích ngược thành các thừa số nguyên tố lại rất khó khăn về mặt tính toán.

- **Mã hóa RSA** – các khóa được tạo từ hai số nguyên tố lớn
- **Diffie-Hellman** – trao đổi khóa trên một modulo số nguyên tố
- **Hàm băm** – số nguyên tố là các hằng số ma thuật (SHA, MD5)

### Toán học và khoa học

- **Lý thuyết số** – các khối xây dựng cơ bản của số nguyên
- **Giả thuyết Goldbach** – mọi số chẵn > 2 có thể được biểu thị dưới dạng tổng của hai số nguyên tố (chưa được chứng minh)
- **Giả thuyết Riemann** – một trong các bài toán của Hilbert, liên quan đến sự phân bố các số nguyên tố

### Ứng dụng thực tế

- **Bảng băm** – kích thước bảng là một số nguyên tố giúp giảm xung đột
- **Bộ tạo số giả ngẫu nhiên** – đồng dư tuyến tính với một modulo số nguyên tố
- **Âm nhạc và nhịp điệu** – đa nhịp điệu với độ dài chu kỳ là số nguyên tố

## Phân bố số nguyên tố

Các số nguyên tố được phân bố không đều giữa các số tự nhiên, nhưng mật độ của chúng giảm dần khi phạm vi tăng lên. Điều này được mô tả bởi **Định lý số nguyên tố**: số lượng số nguyên tố lên đến N xấp xỉ N / ln(N).

| Phạm vi | Số lượng số nguyên tố |
| --- | --- |
| 1–10 | 4 |
| 1–100 | 25 |
| 1–1 000 | 168 |
| 1–10 000 | 1 229 |
| 1–100 000 | 9 592 |
| 1–1 000 000 | 78 498 |

## Sàng Eratosthenes từng bước

```
Phạm vi 2–30:
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]

1. Chọn 2, gạch bỏ các bội số: 4, 6, 8, 10, 12...
2. Chọn 3, gạch bỏ các bội số: 9, 15, 21, 27...
3. Chọn 5, gạch bỏ các bội số: 25...
4. √30 ≈ 5.5 → hoàn tất

Các số nguyên tố: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29
```

## Sàng Eratosthenes trong mã

### JavaScript

```
function sieve(to) {
  const composite = new Uint8Array(to + 1);
  const primes = [];
  for (let p = 2; p <= to; p++) {
    if (composite[p]) continue;
    primes.push(p);
    for (let j = p * p; j <= to; j += p) composite[j] = 1;
  }
  return primes;
}
```

### Python

```
def sieve(n):
    composite = bytearray(n + 1)
    primes = []
    for p in range(2, n + 1):
        if not composite[p]:
            primes.append(p)
            for j in range(p * p, n + 1, p):
                composite[j] = 1
    return primes
```

## Câu hỏi thường gặp (FAQ)

### Số 1 có phải là số nguyên tố không?

Không. Số 1 theo truyền thống không được coi là số nguyên tố. Lý do là về mặt toán học – nếu chúng ta coi 1 là số nguyên tố, định lý về phân tích thừa số nguyên tố duy nhất sẽ không còn giá trị.

### Số 2 có phải là số nguyên tố không?

Có. Số 2 là số nguyên tố nhỏ nhất và cũng là số nguyên tố chẵn duy nhất. Tất cả các số chẵn khác đều chia hết cho hai, do đó là số hợp số.

### Có bao nhiêu số nguyên tố?

Vô hạn. Euclid đã chứng minh điều này vào khoảng năm 300 TCN bằng một chứng minh phản chứng thanh lịch: giả sử có một số hữu hạn số nguyên tố. Tích của chúng + 1 sau đó không thể chia hết cho bất kỳ số nào trong số đó – do đó, đó là một số nguyên tố mới, một mâu thuẫn.

### Số nguyên tố sinh đôi là gì?

Số nguyên tố sinh đôi là các cặp số nguyên tố cách nhau 2 đơn vị, ví dụ như (3, 5), (11, 13), (17, 19), (41, 43). Việc liệu có vô số cặp số nguyên tố sinh đôi hay không vẫn là một câu hỏi chưa được giải đáp trong toán học (Giả thuyết số nguyên tố sinh đôi).

### Thuật toán hoạt động nhanh như thế nào?

Sàng Eratosthenes có độ phức tạp thời gian là O(n log log n). Đối với phạm vi lên đến 10 triệu, quá trình tính toán trong trình duyệt thường mất dưới 100 ms.

## Other languages

- Čeština (cs): [Generátor prvočísel](https://acrafto.com/cs/generator-prvocisel/) ([Markdown](https://acrafto.com/cs/generator-prvocisel/index.md))
- Slovenčina (sk): [Generátor prvočísel](https://acrafto.com/sk/generator-prvocisel/) ([Markdown](https://acrafto.com/sk/generator-prvocisel/index.md))
- English (en): [Prime Number Generator](https://acrafto.com/en/prime-number-generator/) ([Markdown](https://acrafto.com/en/prime-number-generator/index.md))
- Deutsch (de): [Primzahlgenerator](https://acrafto.com/de/online-primzahl-generator/) ([Markdown](https://acrafto.com/de/online-primzahl-generator/index.md))
- Français (fr): [Générateur de nombres premiers](https://acrafto.com/fr/generateur-nombres-premiers/) ([Markdown](https://acrafto.com/fr/generateur-nombres-premiers/index.md))
- Español (es): [Generador de números primos](https://acrafto.com/es/generador-numeros-primos-online/) ([Markdown](https://acrafto.com/es/generador-numeros-primos-online/index.md))
- Italiano (it): [Generatore di numeri primi](https://acrafto.com/it/generatore-numeri-primi/) ([Markdown](https://acrafto.com/it/generatore-numeri-primi/index.md))
- Português (pt): [Gerador de números primos](https://acrafto.com/pt/gerador-numeros-primos-online/) ([Markdown](https://acrafto.com/pt/gerador-numeros-primos-online/index.md))
- Nederlands (nl): [Priemgetallengenerator](https://acrafto.com/nl/online-priemgetalgenerator/) ([Markdown](https://acrafto.com/nl/online-priemgetalgenerator/index.md))
- Polski (pl): [Generator liczb pierwszych](https://acrafto.com/pl/generator-liczb-pierwszych/) ([Markdown](https://acrafto.com/pl/generator-liczb-pierwszych/index.md))
- Română (ro): [Generator numere prime](https://acrafto.com/ro/generator-numere-prime-online/) ([Markdown](https://acrafto.com/ro/generator-numere-prime-online/index.md))
- Magyar (hu): [Prímszám generátor](https://acrafto.com/hu/primszam-generator/) ([Markdown](https://acrafto.com/hu/primszam-generator/index.md))
- Ελληνικά (el): [Γεννήτρια πρώτων αριθμών](https://acrafto.com/el/gennitria-proton-arithmon-online/) ([Markdown](https://acrafto.com/el/gennitria-proton-arithmon-online/index.md))
- Български (bg): [Генератор на прости числа](https://acrafto.com/bg/generator-na-prosti-chisla-onlajn/) ([Markdown](https://acrafto.com/bg/generator-na-prosti-chisla-onlajn/index.md))
- Hrvatski (hr): [Generator prostih brojeva](https://acrafto.com/hr/generator-prostih-brojeva-online/) ([Markdown](https://acrafto.com/hr/generator-prostih-brojeva-online/index.md))
- Slovenščina (sl): [Generator praštevil](https://acrafto.com/sl/generator-prastevil/) ([Markdown](https://acrafto.com/sl/generator-prastevil/index.md))
- Eesti (et): [Algarvude generaator](https://acrafto.com/et/algarvude-generaator/) ([Markdown](https://acrafto.com/et/algarvude-generaator/index.md))
- Latviešu (lv): [Pirmskaitļu ģenerators](https://acrafto.com/lv/primskaitlu-generators/) ([Markdown](https://acrafto.com/lv/primskaitlu-generators/index.md))
- Lietuvių (lt): [Pirminių skaičių generatorius](https://acrafto.com/lt/pirminiu-skaiciu-generatorius/) ([Markdown](https://acrafto.com/lt/pirminiu-skaiciu-generatorius/index.md))
- Svenska (sv): [Primtalsgenerator](https://acrafto.com/sv/primtalsgenerator-online/) ([Markdown](https://acrafto.com/sv/primtalsgenerator-online/index.md))
- Dansk (da): [Primtalsgenerator](https://acrafto.com/da/primtal-generator-online/) ([Markdown](https://acrafto.com/da/primtal-generator-online/index.md))
- Suomi (fi): [Alkulukugeneraattori](https://acrafto.com/fi/alkuluku-generaattori/) ([Markdown](https://acrafto.com/fi/alkuluku-generaattori/index.md))
- Norsk (no): [Primtallsgenerator](https://acrafto.com/no/primtallsgenerator/) ([Markdown](https://acrafto.com/no/primtallsgenerator/index.md))
- Українська (uk): [Генератор простих чисел](https://acrafto.com/uk/generator-prostyh-chysel/) ([Markdown](https://acrafto.com/uk/generator-prostyh-chysel/index.md))
- Русский (ru): [Генератор простых чисел](https://acrafto.com/ru/generator-prostykh-chisel-onlayn/) ([Markdown](https://acrafto.com/ru/generator-prostykh-chisel-onlayn/index.md))
- Српски (sr): [Generator prostih brojeva](https://acrafto.com/sr/generator-prostih-brojeva-online/) ([Markdown](https://acrafto.com/sr/generator-prostih-brojeva-online/index.md))
- Македонски (mk): [Генератор на прости броеви](https://acrafto.com/mk/generator-na-prosti-broevi/) ([Markdown](https://acrafto.com/mk/generator-na-prosti-broevi/index.md))
- Bosanski (bs): [Generator prostih brojeva](https://acrafto.com/bs/generator-prostih-brojeva/) ([Markdown](https://acrafto.com/bs/generator-prostih-brojeva/index.md))
- Shqip (sq): [Gjenerator numrash të thjeshtë](https://acrafto.com/sq/gjenerator-numrash-te-thjeshte/) ([Markdown](https://acrafto.com/sq/gjenerator-numrash-te-thjeshte/index.md))
- Türkçe (tr): [Asal sayı bulucu](https://acrafto.com/tr/asal-sayi-olusturucu/) ([Markdown](https://acrafto.com/tr/asal-sayi-olusturucu/index.md))
- 日本語 (ja): [素数一覧・生成ツール](https://acrafto.com/ja/online-prime-number-generator/) ([Markdown](https://acrafto.com/ja/online-prime-number-generator/index.md))
- 한국어 (ko): [소수 구하기](https://acrafto.com/ko/prime-number-generator/) ([Markdown](https://acrafto.com/ko/prime-number-generator/index.md))
- العربية (ar): [مولد الأعداد الأولية](https://acrafto.com/ar/prime-number-generator/) ([Markdown](https://acrafto.com/ar/prime-number-generator/index.md))
- हिन्दी (hi): [अभाज्य संख्या जनरेटर](https://acrafto.com/hi/prime-generator/) ([Markdown](https://acrafto.com/hi/prime-generator/index.md))
- Bahasa Indonesia (id): [Generator bilangan prima](https://acrafto.com/id/generator-bilangan-prima-online/) ([Markdown](https://acrafto.com/id/generator-bilangan-prima-online/index.md))
- ไทย (th): [หาจำนวนเฉพาะ](https://acrafto.com/th/prime-number-generator/) ([Markdown](https://acrafto.com/th/prime-number-generator/index.md))
- עברית (he): [מחולל מספרים ראשוניים](https://acrafto.com/he/prime-number-generator/) ([Markdown](https://acrafto.com/he/prime-number-generator/index.md))
