ความเห็นเพิ่มเติมที่ 27 5 เม.ย. 2549 (15:10) สำหรับการต่อยอดออกไป
อย่างที่คุณแงซายว่า เรารู้อยู่แล้วว่านอกจาก 2 แล้วเลขคู่นั้นไม่ใช่จำนวนเฉพาะแน่นอน เราจึงสามารถทดสอบโดยใช้แต่เลขคี่
วิธีนี้ลดจำนวนตัวเลขที่ต้องทดสอบเหลือเพียง 50%
ในเมื่อเราสามารถตัดตัวที่หาร 2 ลงตัวออกได้ ทำไมเราไม่ทำกับพวกที่หาร 3 ลงตัวบ้างล่ะ
ฟังดูเหมือนต้องมาคำนวณกันวุ่นวาย แต่หากเราลองคิดดูผลการหารจำนวนด้วยเลข 2 จะซ้ำทุกๆ 2 จำนวน และหารด้วย 3 จะซ้ำทุกๆ 3 จำนวน ดังนั้นหากจัดเป็นกลุ่มเฉพาะของผลหาร 2 และ 3 จะได้เป็น ครน.ของ 2 และ 3 นั่นคือ 6
1 หาร 2 ไม่ลงตัว หาร 3 ไม่ลงตัว
2 หาร 2 ลงตัว หาร 3 ไม่ลงตัว
3 หาร 2 ไม่ลงตัว หาร 3 ลงตัว
4 หาร 2 ลงตัว หาร 3 ไม่ลงตัว
5 หาร 2 ไม่ลงตัว หาร 3 ไม่ลงตัว
6 หาร 2 ลงตัว หาร 3 ลงตัว
จะเห็นว่ามีตัวที่หารด้วย 2 และ 3 ไม่ลงตัวอยู่เพียง 2 จำนวน จากทุกๆ 6 จำนวน
เหลือ 1/3 เท่านั้นเอง
ถ้าลองเอาเลขที่หาร 5 ลงตัวมาร่วมวงด้วย ครน.ของ 2,3,5 คือ 30 ไล่ดูจะพบว่าจำนวนที่รอดไปได้มีเพียง 8 จำนวนในทุกๆ 30 จำนวน
นั่นคือเหลือเพียงไม่ถึง 27%
ทางปฏิบัติเราสามารถเอาไปใช้ได้อย่างไร
ไม่ยากเลยครับ ลองเขียนอย่างที่ผมทำกับ 2 และ 3 จะเห็นว่าลำดับของ 8 จำนวนในทุก 30 จำนวนคือ
ทดสอบด้วย 2,3,5,7 หลังจากนั้น +4, +2, +4, +2, +4, +6, +2, +6 แล้ววนไป +4, +2, +4, +2, +4, +6, +2, +6 ต่อไปเรื่อยๆจนกว่าจะได้คำตอบ
นั่นคือ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,49,53,...
algorithm นี้เหมาะกับ computer แต่สำหรับนักเรียนแล้วเลขที่ลงท้ายด้วย 5 และ 0 นั้นชัดเจนมาก(ในขณะที่ computer ต้องเปลืองเวลาคำนวณจึงรู้)
ดังนั้นการถอยกลับไปใช้แค่ 2 กับ 3 อาจจะเหมาะกว่า ลำดับก็ง่ายแก้การจดจำมาก
คือ หลังจากทดสอบ 2,3,5 แล้วก็แค่ทดสอบด้วยค่าที่ +2, +4, +2, +4 ไปเรื่อยๆ ตัวไหนลงด้วย 5 ก็ผ่านเลย
วิธีที่คล้ายคลึงกันนี้ครูสอนคณิตศาสตร์ควรได้ศึกษา The Sieve of Eratosthenes โดยหารายละเอียดได้ทั่วไปใน internet
แต่ถ้าเปลี่ยนโจทย์เป็นการหาจำนวนเฉพาะทุกตัวที่เป็นไปได้ในช่วง 1-n (ดังเช่นในโปรแกรมที่คุณแงซายทำไว้) จะมีวิธีดีๆหรือไม่
ทุกๆท่านข้างต้นได้ชี้แนะไว้แล้ว
ในเมื่อเราต้องหารหา prime ทุกตัว หากไม่ติดขัดเรื่องหน่วยความจำแล้วล่ะก็
เราก็ทดสอบด้วยตัวเลข prime ที่เรารู้อยู่ก่อนแล้ว
เริ่มต้นเรามี
2
ทดสอบ 3 ด้วย 2 ไม่ลงตัวแสดงว่า 3 เป็น prime number จะได้
2 3
ทดสอบ 4 ด้วย 2 3 ไม่ผ่านตั้งแต่ 2
ทดสอบ 5 ด้วย 2 3 ไม่ลงตัวแสดงว่า 5 เป็น prime number จะได้
2 3 5
ทำดังนี้ไปเรื่อยๆ
ง่ายไหม?
ทำมือก็ได้ขอแต่กระดาษแผ่นเดียวกับคนที่หารเลขเป็น ซึ่งก็คือเด็กประถมนั่นเอง
เด็กม.ต้นทำได้สบายมากๆเลยครับ