ตรวจจำนวนเฉพาะ
ตรวจว่าจำนวนเต็มเป็นจำนวนเฉพาะหรือไม่
ตรวจจำนวนเฉพาะ คืออะไร?
จำนวนเฉพาะมากกว่าหนึ่งและไม่มีตัวหารบวกอื่นนอกจากหนึ่งและตัวมันเอง
ประเด็นสำคัญ
- เปิด compiler warning และแก้ทุกคำเตือน
- รู้ type และ lifetime ของทุกค่า
- ตรวจ input และขอบเขต array ให้ชัดเจน
ตัวอย่างโค้ด C และ C++
main.c
#include <stdio.h>
int main(void) {
int number = 29, prime = number > 1;
// A composite number has a factor no larger than its square root.
for (int divisor = 2; divisor * divisor <= number; ++divisor)
if (number % divisor == 0) { prime = 0; break; }
printf("%d is %sprime\n", number, prime ? "" : "not ");
}
29 is prime
C++
main.cpp
#include <iostream>
int main() {
int number = 29;
bool prime = number > 1;
// Stop after the square root and on the first divisor.
for (int divisor = 2; divisor * divisor <= number && prime; ++divisor)
prime = number % divisor != 0;
std::cout << number << " is " << (prime ? "" : "not ") << "prime\n";
}
29 is prime
เปรียบเทียบ C และ C++
ทดลองตัวหารเฉพาะตอนที่กำลังสองของตัวหารยังไม่เกินตัวเลขนั้น จะได้ไม่ตรวจเกินจำเป็น
C
C แสดง API แบบ procedural และรายละเอียด representation อย่างชัดเจน
C++
C++ รักษา low-level model และเพิ่ม type ที่ปลอดภัยกว่า
แบบฝึกหัด
รันทั้งสองเวอร์ชันแล้วแก้ไขเพื่อสังเกตความแตกต่างของภาษา
- เพิ่ม input ผิดและค่าขอบเขต
- Compile ด้วย -Wall -Wextra -Wpedantic
- แยก declaration และ implementation
ฝึกด้วยโจทย์
ใช้สิ่งที่เรียนในบทนี้แก้ปัญหาจริง ทุกโจทย์รันในเบราว์เซอร์ พร้อมการทดสอบทันทีและรีวิวจาก AI
- ตรวจสอบจำนวนเฉพาะ ตัดสินว่าตัวเลขเป็นจำนวนเฉพาะหรือไม่ ง่าย
- List Primes With a Sieve Find primes up to a limit by marking composite multiples. ปานกลาง