ตะแกรงของ Eratosthenes เป็นหนึ่งในวิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาจำนวนเฉพาะที่น้อยกว่า n เมื่อ n น้อยกว่า 10 ล้านตัว
โปรแกรมที่สาธิต Sieve of Eratosthenes มีดังนี้
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; void SieveOfEratosthenes(int num) { bool pno[num+1]; memset(pno, true, sizeof(pno)); for (int i = 2; i*i< = num; i++) { if (pno[i] == true) { for (int j = i*2; j< = num; j + = i) pno[j] = false; } } for (int i = 2; i< = num; i++) if (pno[i]) cout << i << " "; } int main() { int num = 15; cout << "The prime numbers smaller or equal to "<< num <<" are: "; SieveOfEratosthenes(num); return 0; }
ผลลัพธ์
ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้
The prime numbers smaller or equal to 15 are: 2 3 5 7 11 13
ตอนนี้ เรามาทำความเข้าใจโปรแกรมข้างต้นกัน
ฟังก์ชัน SieveOfEratosthenes() จะค้นหาจำนวนเฉพาะทั้งหมดที่เกิดขึ้นก่อน num ที่ระบุเป็นอาร์กิวเมนต์ ข้อมูลโค้ดสำหรับสิ่งนี้มีดังต่อไปนี้
void SieveOfEratosthenes(int num) { bool pno[num+1]; memset(pno, true, sizeof(pno)); for (int i = 2; i*i< = num; i++) { if (pno[i] == true) { for (int j = i*2; j< = num; j + = i) pno[j] = false; } } for (int i = 2; i< = num; i++) if (pno[i]) cout << i << " "; }
ฟังก์ชัน main() ตั้งค่าของ num แล้วพิมพ์จำนวนเฉพาะทั้งหมดที่น้อยกว่าหรือเท่ากับ num ทำได้โดยการเรียกใช้ฟังก์ชัน SieveOfEratosthenes() ข้อมูลโค้ดสำหรับสิ่งนี้มีดังต่อไปนี้
int main() { int num = 15; cout << "The prime numbers smaller or equal to "<< num <<" are: "; SieveOfEratosthenes(num); return 0; }